使用RadioButton+Fragment實(shí)現(xiàn)底部導(dǎo)航欄效果
底部導(dǎo)航欄,在我們App項(xiàng)目中是非常常用!而且實(shí)現(xiàn)它的方式很多,今天我們就來使用RadioButton+Fragment實(shí)現(xiàn)底部導(dǎo)航欄!
下面就讓我們動手吧,首先我們打開RadioButtonDemo這個(gè)項(xiàng)目,首先修改activity_main.xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.jackhu.radiobuttondemo.MainActivity"> <FrameLayout android:id="@+id/mFragment" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"></FrameLayout> <RadioGroup android:layout_marginBottom="2dp" android:id="@+id/mRadioGroup" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="48dp"> <RadioButton android:drawableTop="@drawable/rbhome" android:button="@null" android:checked="true" android:textColor="@color/colorRadioButtonP" android:id="@+id/mRb_home" android:gravity="center" android:layout_width="0dp" android:text="Home" android:layout_weight="1" android:layout_height="match_parent" /> <RadioButton android:drawableTop="@drawable/rb_message" android:button="@null" android:textColor="@color/colorRadioButtonN" android:id="@+id/mRb_message" android:gravity="center" android:layout_width="0dp" android:text="Message" android:layout_weight="1" android:layout_height="match_parent" /> <RadioButton android:drawableTop="@drawable/rbfind" android:button="@null" android:textColor="@color/colorRadioButtonN" android:id="@+id/mRb_find" android:gravity="center" android:layout_width="0dp" android:text="Find" android:layout_weight="1" android:layout_height="match_parent" /> <RadioButton android:drawableTop="@drawable/rbmy" android:button="@null" android:textColor="@color/colorRadioButtonN" android:id="@+id/mRb_my" android:gravity="center" android:layout_width="0dp" android:text="My" android:layout_weight="1" android:layout_height="match_parent" /> </RadioGroup> </LinearLayout>
這里我們在布局文件Fragment控件:用于顯示界面的切換。
RadioGroup控件包含了4個(gè)RadioButton:用于顯示按鈕。我們給第一個(gè)按鈕check為true默認(rèn)選中。其中android:button=”@null” 取消圓點(diǎn)。
drawableTop屬性:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/home_p"/> <item android:drawable="@drawable/home_n"/> </selector>
顯示選擇和未選中的狀態(tài)的圖標(biāo)
創(chuàng)建Fragment,加載Fragment布局文件,類代碼如下:
package com.example.jackhu.radiobuttondemo.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.jackhu.radiobuttondemo.R;
/**
* A simple {@link Fragment} subclass.
*/
public class HomeFragment extends Fragment {
public HomeFragment() {
// Required empty public constructor
}
//單例模式
public static HomeFragment newInstance(){
HomeFragment homeFragment=new HomeFragment();
return homeFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false);
}
}
接下來我們來修改MainActivity.class中的代碼,在這里實(shí)現(xiàn)點(diǎn)擊按鈕切換Fragment的具體功能,代碼如下:
package com.example.jackhu.radiobuttondemo;
import android.support.annotation.IdRes;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import com.example.jackhu.radiobuttondemo.fragment.FindFragment;
import com.example.jackhu.radiobuttondemo.fragment.HomeFragment;
import com.example.jackhu.radiobuttondemo.fragment.MessageFragment;
import com.example.jackhu.radiobuttondemo.fragment.MyFragment;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {
private RadioGroup mRadioGroup;
private List<Fragment> fragments = new ArrayList<>();
private Fragment fragment;
private FragmentManager fm;
private FragmentTransaction transaction;
private RadioButton rb_Home,rb_Message,rb_Find,rb_My;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView(); //初始化組件
mRadioGroup.setOnCheckedChangeListener(this); //點(diǎn)擊事件
fragments = getFragments(); //添加布局
//添加默認(rèn)布局
normalFragment();
}
//默認(rèn)布局
private void normalFragment() {
fm=getSupportFragmentManager();
transaction=fm.beginTransaction();
fragment=fragments.get(0);
transaction.replace(R.id.mFragment,fragment);
transaction.commit();
}
private void initView() {
mRadioGroup = (RadioGroup) findViewById(R.id.mRadioGroup);
rb_Home= (RadioButton) findViewById(R.id.mRb_home);
rb_Message= (RadioButton) findViewById(R.id.mRb_message);
rb_Find= (RadioButton) findViewById(R.id.mRb_find);
rb_My= (RadioButton) findViewById(R.id.mRb_my);
}
@Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
fm=getSupportFragmentManager();
transaction=fm.beginTransaction();
switch (checkedId){
case R.id.mRb_home:
fragment=fragments.get(0);
transaction.replace(R.id.mFragment,fragment);
Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
break;
case R.id.mRb_message:
fragment=fragments.get(1);
transaction.replace(R.id.mFragment,fragment);
Toast.makeText(this, "Message", Toast.LENGTH_SHORT).show();
break;
case R.id.mRb_find:
fragment=fragments.get(2);
transaction.replace(R.id.mFragment,fragment);
Toast.makeText(this, "Find", Toast.LENGTH_SHORT).show();
break;
case R.id.mRb_my:
fragment=fragments.get(3);
transaction.replace(R.id.mFragment,fragment);
Toast.makeText(this, "My", Toast.LENGTH_SHORT).show();
break;
}
setTabState();
transaction.commit();
}
//設(shè)置選中和未選擇的狀態(tài)
private void setTabState() {
setHomeState();
setMessageState();
setFindState();
setMyState();
}
private void setMyState() {
if (rb_My.isChecked()){
rb_My.setTextColor(ContextCompat.getColor(this,R.color.colorRadioButtonP));
}else{
rb_My.setTextColor(ContextCompat.getColor(this,R.color.colorRadioButtonN));
}
}
private void setFindState() {
if (rb_Find.isChecked()){
rb_Find.setTextColor(ContextCompat.getColor(this,R.color.colorRadioButtonP));
}else{
rb_Find.setTextColor(ContextCompat.getColor(this,R.color.colorRadioButtonN));
}
}
private void setMessageState() {
if (rb_Message.isChecked()){
rb_Message.setTextColor(ContextCompat.getColor(this,R.color.colorRadioButtonP));
}else{
rb_Message.setTextColor(ContextCompat.getColor(this,R.color.colorRadioButtonN));
}
}
private void setHomeState() {
if (rb_Home.isChecked()){
rb_Home.setTextColor(ContextCompat.getColor(this,R.color.colorRadioButtonP));
}else{
rb_Home.setTextColor(ContextCompat.getColor(this,R.color.colorRadioButtonN));
}
}
public List<Fragment> getFragments() {
fragments.add(new HomeFragment());
fragments.add(new MessageFragment());
fragments.add(new FindFragment());
fragments.add(new MyFragment());
return fragments;
}
}
好了,這樣的話,所有的代碼就已經(jīng)完成了,可以運(yùn)行一下看看完整的效果了最終效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)底部導(dǎo)航欄功能
- android實(shí)現(xiàn)底部導(dǎo)航欄
- Android程序開發(fā)之Fragment實(shí)現(xiàn)底部導(dǎo)航欄實(shí)例代碼
- Android實(shí)現(xiàn)底部導(dǎo)航欄功能(選項(xiàng)卡)
- Android中TabLayout+ViewPager 簡單實(shí)現(xiàn)app底部Tab導(dǎo)航欄
- Android design包自定義tablayout的底部導(dǎo)航欄的實(shí)現(xiàn)方法
- android中Fragment+RadioButton實(shí)現(xiàn)底部導(dǎo)航欄
- Android實(shí)現(xiàn)簡單底部導(dǎo)航欄 Android仿微信滑動切換效果
- 性能分析:指如何快速定位SQL問題
- Android用Scroller實(shí)現(xiàn)一個(gè)可向上滑動的底部導(dǎo)航欄
相關(guān)文章
Android studio 下JNI編程實(shí)例并生成so庫的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android studio 下JNI編程實(shí)例并生成so庫,需要的朋友可以參考下2017-09-09
Android EditText監(jiān)聽回車鍵并處理兩次回調(diào)問題
這篇文章主要介紹了Android EditText監(jiān)聽回車鍵并處理兩次回調(diào)問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
Android 單例模式實(shí)現(xiàn)可復(fù)用數(shù)據(jù)存儲的詳細(xì)過程
本文介紹了如何使用單例模式實(shí)現(xiàn)一個(gè)可復(fù)用的數(shù)據(jù)存儲類,該類可以存儲不同類型的數(shù)據(jù),并提供統(tǒng)一的接口來訪問這些數(shù)據(jù),通過雙重檢查鎖定機(jī)制,該類在多線程環(huán)境下是線程安全的,感興趣的朋友跟隨小編一起看看吧2025-02-02
Flutter獲取ListView當(dāng)前正在顯示的Widget信息(應(yīng)用場景)
ListView是Flutter里最常用的Widget了,當(dāng)屏幕放不下的時(shí)候,它可以自帶滾動功能,用法也很簡單,本文通過實(shí)例代碼給大家介紹Flutter獲取ListView當(dāng)前正在顯示的Widget信息,感興趣的朋友一起看看吧2022-05-05
Android開發(fā)之圖片壓縮實(shí)現(xiàn)方法分析
這篇文章主要介紹了Android開發(fā)之圖片壓縮實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Android圖片壓縮的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-03-03
android項(xiàng)目實(shí)現(xiàn)帶進(jìn)度條的系統(tǒng)通知欄消息
本篇文章主要介紹了android項(xiàng)目實(shí)現(xiàn)帶進(jìn)度條的系統(tǒng)通知欄消息,就是實(shí)現(xiàn)在通知欄看到下載進(jìn)度。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-10-10

