国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Android入門(mén)到項(xiàng)目實(shí)戰(zhàn)-- 11.2】—— 實(shí)現(xiàn)底部導(dǎo)航欄(RadioGroup+Fragment)

這篇具有很好參考價(jià)值的文章主要介紹了【Android入門(mén)到項(xiàng)目實(shí)戰(zhàn)-- 11.2】—— 實(shí)現(xiàn)底部導(dǎo)航欄(RadioGroup+Fragment)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

實(shí)現(xiàn)效果

????????效果如下,使用RadioGroup實(shí)現(xiàn),不能左右滑動(dòng)切換頁(yè)面,適用于導(dǎo)航頁(yè)里還有需要切換頁(yè)面的場(chǎng)景,如果需要滑動(dòng)效果,使用ViewPager實(shí)現(xiàn)。

【Android入門(mén)到項(xiàng)目實(shí)戰(zhàn)-- 11.2】—— 實(shí)現(xiàn)底部導(dǎo)航欄(RadioGroup+Fragment)

?準(zhǔn)備工作

??????? 以下示例按照?qǐng)D上實(shí)現(xiàn),具體多少個(gè)頁(yè)面,按需修改。

??????? 由于需要用到icon,提前下載好圖標(biāo)到drawable文件。

【Android入門(mén)到項(xiàng)目實(shí)戰(zhàn)-- 11.2】—— 實(shí)現(xiàn)底部導(dǎo)航欄(RadioGroup+Fragment)

??????? 提前定義好樣式

??????? 在values文件下新建styles.xml,用作fragment的布局樣式,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="fragment">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:padding">5dp</item>
        <item name="android:gravity">center</item>
        <item name="android:textColor">@drawable/rb_text_color</item>
        <item name="android:textSize">10dp</item>
        <item name="android:textStyle">normal</item>
    </style>

</resources>

??????? 首頁(yè)的選擇圖標(biāo)樣式,在drawable文件下新建rb_home_selector.xml,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/home2" android:state_selected="true" />
    <item android:drawable="@drawable/home" />
</selector>

??????? 個(gè)人頁(yè)面圖標(biāo),drawable下新建rb_mine_selector.xml,如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/mine2" android:state_selected="true" />
    <item android:drawable="@drawable/mine" />
</selector>

???????? 選擇頁(yè)面時(shí)的字體樣式,drawable下新建rb_text_color.xml,如下;

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="#1296db"/>
    <item android:color="#808080"/>
</selector>

使用replace方法代碼實(shí)現(xiàn)

??????? 什么是replace方法,使用replace方法,當(dāng)切換碎片時(shí),當(dāng)前碎片會(huì)銷毀,下次切換回來(lái)時(shí)再重新創(chuàng)建,適用于只使用一次碎片的場(chǎng)景。

activity_main.xml代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/fragment_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        />

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/rg_group"
        android:layout_alignParentBottom="true"
        android:background="#ffff"
        android:orientation="horizontal"
        >
        <RadioButton
            android:id="@+id/rb_home"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            style="@style/fragment"
            android:drawableTop="@drawable/rb_home_selector"
            android:text="首頁(yè)"
            />
        <RadioButton
            android:id="@+id/rb_mine"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            style="@style/fragment"
            android:drawableTop="@drawable/rb_mine_selector"
            android:text="我的"
            />
    </RadioGroup>
</RelativeLayout>

MainActivity類如下:

public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {

    private RadioButton rb_home,rb_mine;
    private RadioGroup rg_group;
    private List<Fragment> fragments;
    private int position=0;
    private static final String TAG = "MainActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.getSupportActionBar().hide();//去除標(biāo)題欄

        rb_home=findViewById(R.id.rb_home);
        rb_mine=findViewById(R.id.rb_mine);
        rg_group=findViewById(R.id.rg_group);

        //默認(rèn)選中第一個(gè)
        rb_home.setSelected(true);

        rg_group.setOnCheckedChangeListener(this);

        //初始化fragment
        initFragment();

        //默認(rèn)布局,選第一個(gè)
        defaultFragment();
    }

    private void defaultFragment() {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.fragment_layout,fragments.get(0));
        transaction.commit();
    }

    private void setSelected() {
        rb_home.setSelected(false);
        rb_mine.setSelected(false);
    }

    private void initFragment() {
        fragments = new ArrayList<>();
        fragments.add(0,new homeFragment());
        fragments.add(1,new mineFragment());
    }

    @Override
    public void onCheckedChanged(RadioGroup group, int i) {
        //獲取fragment管理類對(duì)象
        FragmentManager fragmentManager = getSupportFragmentManager();
        //拿到fragmentManager的觸發(fā)器
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        switch (i) {
            case R.id.rb_home:
                position = 0;
                //調(diào)用replace方法,將fragment,替換到fragment_layout這個(gè)id所在UI,或者這個(gè)控件上面來(lái)
                //這是創(chuàng)建replace這個(gè)事件,如果想要這個(gè)事件執(zhí)行,需要把這個(gè)事件提交給觸發(fā)器
                //用commit()方法
                transaction.replace(R.id.fragment_layout, fragments.get(0));
                //將所有導(dǎo)航欄設(shè)成默認(rèn)色
                setSelected();
                rb_home.setSelected(true);
                break;
            case R.id.rb_mine:
                position = 1;
                transaction.replace(R.id.fragment_layout, fragments.get(1));
                //將所有導(dǎo)航欄設(shè)成默認(rèn)色
                setSelected();
                rb_mine.setSelected(true);
                break;
        }
        //事件的提交
        transaction.commit();
    }

}

??????? 如下圖操作新建fragment類,一起創(chuàng)建xml文件

【Android入門(mén)到項(xiàng)目實(shí)戰(zhàn)-- 11.2】—— 實(shí)現(xiàn)底部導(dǎo)航欄(RadioGroup+Fragment)

???????? homeFragment.java代碼:這個(gè)類寫(xiě)頁(yè)面的具體邏輯

public class homeFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_home, container, false);
        return view;
    }
}

??????? mineFragment類和上面一樣,略。

??????? fragment_home.xml和fragment_mine.xml里按需寫(xiě)頁(yè)面的布局就可以了。

完成。

使用add和hide方法

????????通過(guò)add、hide、show方法顯示隱藏碎片,當(dāng)下次切換回當(dāng)前碎片時(shí),不會(huì)重新創(chuàng)建碎片,適用于多次使用碎片的場(chǎng)景,比如導(dǎo)航欄。

????????布局和上面方法的布局一樣。

??????? 只修改MainActivity類:

??????? 先判斷有沒(méi)有添加碎片,如果沒(méi)有則添加碎片(注意需要判斷,重復(fù)添加會(huì)報(bào)錯(cuò)),隱藏所有的碎片,再展示當(dāng)前選擇的碎片。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-498734.html

public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {

    private RadioButton rb_home,rb_schedule,rb_circle,rb_rank,rb_mine;
    private RadioGroup rg_group;
    private List<Fragment> fragments;
    private int position=0;
    private static final String TAG = "MainActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setStatusBar();//設(shè)置狀態(tài)欄和標(biāo)題欄

        rb_home=findViewById(R.id.rb_home);
        rb_schedule=findViewById(R.id.rb_schedule);
        rb_circle=findViewById(R.id.rb_circle);
        rb_rank=findViewById(R.id.rb_rank);
        rb_mine=findViewById(R.id.rb_mine);
        rg_group=findViewById(R.id.rg_group);

        //默認(rèn)選中第一個(gè)
        rb_home.setSelected(true);

        rg_group.setOnCheckedChangeListener(this);

        //初始化fragment
        initFragment();

        //默認(rèn)布局,選第一個(gè)
        defaultFragment();
    }

    private void defaultFragment() {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(R.id.fragment_layout,fragments.get(0));
        transaction.commit();

    }

    private void setSelected() {
        rb_home.setSelected(false);
        rb_schedule.setSelected(false);
        rb_circle.setSelected(false);
        rb_rank.setSelected(false);
        rb_mine.setSelected(false);
    }

    private void initFragment() {
        fragments = new ArrayList<>();
        fragments.add(0,new HomeFragment());
        fragments.add(1,new ScheduleFragment());
        fragments.add(2,new CircleFragment());
        fragments.add(3,new RankFragment());
        fragments.add(4,new MineFragment());
    }

    @Override
    public void onCheckedChanged(RadioGroup group, int i) {
        //獲取fragment管理類對(duì)象
        FragmentManager fragmentManager = getSupportFragmentManager();
        //拿到fragmentManager的觸發(fā)器
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        switch (i) {
            case R.id.rb_home:
                position = 0;
//                transaction.replace(R.id.fragment_layout, fragments.get(0));
                if(!fragments.get(0).isAdded())
                    transaction.add(R.id.fragment_layout,fragments.get(0));
                hideFragment(transaction);
                transaction.show(fragments.get(0));
                //將所有導(dǎo)航欄設(shè)成默認(rèn)色
                setSelected();
                rb_home.setSelected(true);
                break;
            case R.id.rb_schedule:
                position = 1;
                if(!fragments.get(1).isAdded())
                    transaction.add(R.id.fragment_layout,fragments.get(1));
                hideFragment(transaction);
                transaction.show(fragments.get(1));
                //將所有導(dǎo)航欄設(shè)成默認(rèn)色
                setSelected();
                rb_schedule.setSelected(true);
                break;
            case R.id.rb_circle:
                position = 2;
                if(!fragments.get(2).isAdded())
                    transaction.add(R.id.fragment_layout,fragments.get(2));
                hideFragment(transaction);
                transaction.show(fragments.get(2));
                //將所有導(dǎo)航欄設(shè)成默認(rèn)色
                setSelected();
                rb_circle.setSelected(true);
                break;
            case R.id.rb_rank:
                position = 3;
                if(!fragments.get(3).isAdded())
                    transaction.add(R.id.fragment_layout,fragments.get(3));
                hideFragment(transaction);
                transaction.show(fragments.get(3));
                //將所有導(dǎo)航欄設(shè)成默認(rèn)色
                setSelected();
                rb_rank.setSelected(true);
                break;
            case R.id.rb_mine:
                position = 4;
                if(!fragments.get(4).isAdded())
                    transaction.add(R.id.fragment_layout,fragments.get(4));
                hideFragment(transaction);
                transaction.show(fragments.get(4));
                //將所有導(dǎo)航欄設(shè)成默認(rèn)色
                setSelected();
                rb_mine.setSelected(true);
                break;
        }
        //事件的提交
        transaction.commit();
    }

    private void hideFragment(FragmentTransaction transaction){
        if(fragments.get(0) != null){
            transaction.hide(fragments.get(0));
        }
        if(fragments.get(1) != null){
            transaction.hide(fragments.get(1));
        }
        if(fragments.get(2) != null) {
            transaction.hide(fragments.get(2));
        }
        if(fragments.get(3) != null){
            transaction.hide(fragments.get(3));
        }
        if(fragments.get(4) != null){
            transaction.hide(fragments.get(4));
        }
    }

}

到了這里,關(guān)于【Android入門(mén)到項(xiàng)目實(shí)戰(zhàn)-- 11.2】—— 實(shí)現(xiàn)底部導(dǎo)航欄(RadioGroup+Fragment)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • uni-app 經(jīng)驗(yàn)分享,從入門(mén)到離職(二)—— tabBar 底部導(dǎo)航欄實(shí)戰(zhàn)基礎(chǔ)篇

    uni-app 經(jīng)驗(yàn)分享,從入門(mén)到離職(二)—— tabBar 底部導(dǎo)航欄實(shí)戰(zhàn)基礎(chǔ)篇

    這篇文章的內(nèi)容主題是關(guān)于小程序的 tabBar 底部導(dǎo)航欄的入門(mén)使用和實(shí)戰(zhàn)技巧。通過(guò)上一篇文章的基礎(chǔ),我們繼續(xù)對(duì) uni-app 進(jìn)行更深一步的了解和學(xué)習(xí),以上一篇文章創(chuàng)建的項(xiàng)目為例子,我們?cè)谶@個(gè)項(xiàng)目的基礎(chǔ)上進(jìn)行改動(dòng)和學(xué)習(xí)小程序的 tabBar 內(nèi)容。 本篇文章是我的 uni-app 專

    2024年02月11日
    瀏覽(26)
  • Android Jetpack Compose之底部導(dǎo)航欄的實(shí)現(xiàn)

    Android Jetpack Compose之底部導(dǎo)航欄的實(shí)現(xiàn)

    寫(xiě)過(guò)一段Android jetpack compose 界面的小伙伴應(yīng)該都用過(guò)Compose的腳手架 Scaffold ,利用它我們可以很快的實(shí)現(xiàn)一個(gè)現(xiàn)代APP的主流界面架構(gòu),即一個(gè)帶頂部導(dǎo)航欄和底部導(dǎo)航欄的界面架構(gòu),我們基于這個(gè)架構(gòu)可以快速的搭建出我們想要的頁(yè)面效果。而今天的文章就是要介紹如何實(shí)現(xiàn)

    2024年03月23日
    瀏覽(102)
  • android : 底部導(dǎo)航欄的實(shí)現(xiàn)(使用ViewPager和BottomNavigationView)

    android : 底部導(dǎo)航欄的實(shí)現(xiàn)(使用ViewPager和BottomNavigationView)

    ? 本案例中需要用的控件ViewPager和BottomNavigationView ViewPager:主要是頁(yè)面的切換 Fragment:碎片(也就是每個(gè)頁(yè)面的內(nèi)容) BottomNavigationView:底部導(dǎo)航欄 非常簡(jiǎn)單,主要就是一個(gè)Viewpager和BottomNavigationView 先來(lái)說(shuō)一下思路:BottomNavigationView底部導(dǎo)航欄? ?ViewPager+Fragment頁(yè)面 ? ? ? ?

    2024年02月03日
    瀏覽(27)
  • android 關(guān)于TabLayout聯(lián)動(dòng)ViewPager2 實(shí)現(xiàn)底部導(dǎo)航欄

    android 關(guān)于TabLayout聯(lián)動(dòng)ViewPager2 實(shí)現(xiàn)底部導(dǎo)航欄

    最近在心血來(lái)潮想寫(xiě)在app 不過(guò)我關(guān)于android可以說(shuō)是0基礎(chǔ) 在寫(xiě)底部導(dǎo)航欄的時(shí)候去問(wèn)了大佬才知道TabLayout和ViewPager 花了兩天才看懂... 這里只是簡(jiǎn)單介紹因?yàn)槲也粶?zhǔn)備專門(mén)做安卓軟件所以在學(xué)的途中很多地方?jīng)]有認(rèn)真記 本篇文章使用的代碼是Java 這里官方是有將兩個(gè)進(jìn)行聯(lián)動(dòng)

    2024年01月25日
    瀏覽(24)
  • 【Android入門(mén)到項(xiàng)目實(shí)戰(zhàn)-- 11.4】—— ExoPlayer視頻播放器框架的詳細(xì)使用

    【Android入門(mén)到項(xiàng)目實(shí)戰(zhàn)-- 11.4】—— ExoPlayer視頻播放器框架的詳細(xì)使用

    目錄 什么是ExoPlayer 一、基本使用 ?1、添加依賴項(xiàng) ?2、布局 3、Activity 二、自定義播放暫停 1、首先如何隱藏默認(rèn)的開(kāi)始暫停和快進(jìn)? 2、自定義 三、控制視頻畫(huà)面旋轉(zhuǎn)和比例調(diào)整 四、全屏放大和縮小 1、雙擊視頻放大縮小 2、按鈕放大縮小 五、完整的實(shí)現(xiàn)代碼 XML Activity ??

    2024年02月11日
    瀏覽(28)
  • Android studio中使用ViewPager和BottomNavigationView實(shí)現(xiàn)底部導(dǎo)航欄和碎片的同步切換

    Android studio中使用ViewPager和BottomNavigationView實(shí)現(xiàn)底部導(dǎo)航欄和碎片的同步切換

    通過(guò)幾次的踩雷和摸索,完成了以上的操作,本教程寫(xiě)的詳細(xì)全面,包教包會(huì),對(duì)新手有好,看了不會(huì)的聯(lián)系我,我倒立洗頭給你看。 所需控件: fragment 作為Android中最常用的控件,它有自己的聲明周期,可以粗略地等比為能夠分屏的activity,但是和activity有區(qū)別,fragment有自

    2024年02月08日
    瀏覽(22)
  • android中實(shí)現(xiàn)底部導(dǎo)航欄

    android中實(shí)現(xiàn)底部導(dǎo)航欄

    ??????? 底部導(dǎo)航欄在app應(yīng)用中是十分常見(jiàn)了,大部分的安卓應(yīng)用中也都實(shí)現(xiàn)了底部導(dǎo)航欄的功能,這里我就以我以前做的一個(gè)簡(jiǎn)單小說(shuō)閱讀軟件為例,為大家演示一下底部導(dǎo)航欄的使用,需要的朋友直接復(fù)制代碼過(guò)去改寫(xiě)就行了。 ??????? 這里包含了一些進(jìn)行操作實(shí)際

    2024年02月19日
    瀏覽(25)
  • Android底部導(dǎo)航欄之BottomNavigationView

    Android底部導(dǎo)航欄之BottomNavigationView

    1,首先需要添加依賴: implementation \\\'com.google.android.material:material:1.1.0\\\' 2,布局文件中引入: 3,常用屬性: app:itemTextColor 文字的顏色,可以通過(guò) selector 來(lái)控制選中和未選中的顏色 app:itemIconTint 圖標(biāo)的顏色,可以通過(guò) selector 來(lái)控制選中和未選中的顏色 app:itemIconSize 圖標(biāo)大小,

    2024年02月08日
    瀏覽(21)
  • Android BottomNavigation底部導(dǎo)航欄使用

    Android BottomNavigation底部導(dǎo)航欄使用

    原文地址: Android BottomNavigation底部導(dǎo)航欄使用 - Stars-One的雜貨小窩 本文側(cè)重點(diǎn)記錄一些特殊的樣式設(shè)置,所以基本使用這里就簡(jiǎn)單概述一下,詳細(xì)圖文可以去找其他人的博文 1.創(chuàng)建對(duì)應(yīng)的menu菜單文件 2.xml布局引用menu菜單 3.啟動(dòng)Activity預(yù)覽效果 可以使用 setOnItemSelectedListener 方法監(jiān)

    2024年02月12日
    瀏覽(54)
  • Flutter寫(xiě)一個(gè)android底部導(dǎo)航欄框架

    廢話不多說(shuō),上代碼: 在上述示例中,我們創(chuàng)建了一個(gè) MyHomePage 小部件,它是 StatefulWidget 。 MyHomePage 包含底部導(dǎo)航欄和相關(guān)頁(yè)面內(nèi)容。通過(guò) BottomNavigationBar 和 currentIndex 屬性,我們可以控制當(dāng)前選中的導(dǎo)航項(xiàng)并在 onTap 回調(diào)中更新?tīng)顟B(tài)。 在 items 屬性中,我們?cè)O(shè)置了三個(gè) Bott

    2024年02月14日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包