App主界面布局的實(shí)現(xiàn)方式(一)

RadioGroup + Fragment實(shí)現(xiàn)

  • 01 效果圖
    該實(shí)現(xiàn)方式只能通過切換RadioButton來切換頁面腐螟,并不能通過滑動(dòng)來實(shí)現(xiàn)。
MainInterface.png
  • 02 layout
    4個(gè)fragment的相似布局文件
contact_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Contact fragment"
        android:textSize="30sp"/>
</LinearLayout>

主布局文件

activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <!-- 將該FrameLayout作為Fragment的容器 -->
    <FrameLayout 
        android:id="@+id/fl_content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>
    <RadioGroup 
        android:id="@+id/rg_control"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="bottom"
        android:gravity="center">
        <RadioButton
            android:id="@+id/rb_talk"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="30dp"
            android:button="@drawable/radio_talk_selector"
            android:checked="true" />
        <RadioButton 
            android:id="@+id/rb_contact"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:button="@drawable/radio_contact_selector"/>
        <RadioButton 
            android:id="@+id/rb_discovery"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:button="@drawable/radio_discovery_selector"/>
        <RadioButton 
            android:id="@+id/rb_personal"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:button="@drawable/radio_personal_selector"/>
    </RadioGroup>
</LinearLayout>
  • 03 Activity
    4個(gè)Fragment的相似Java代碼
public class ContactFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // 這里注意inflate的第三個(gè)參數(shù)要設(shè)置為false
        View view = inflater.inflate(R.layout.contact_fragment, container, false);
        return view;
    }
}

MainActivity.java

public class MainActivity extends Activity implements OnCheckedChangeListener {
    // 用于對(duì)Fragment進(jìn)行管理
    private FragmentManager fragmentManager;
    private TalkFragment talkFragment;
    private ContactFragment contactFragment;
    private DiscoveryFragment discoveryFragment;
    private PersonalFragment personalFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        fragmentManager = getFragmentManager();
        initUI();
    }

    private void initUI() {
        RadioGroup rg_control = (RadioGroup) findViewById(R.id.rg_control);
        rg_control.setOnCheckedChangeListener(this);
        // 設(shè)置默認(rèn)的Fragment
        setDefaultFragment();
    }

    private void setDefaultFragment() {
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        talkFragment = new TalkFragment();
        transaction.add(R.id.fl_content, talkFragment);
        transaction.commit();
    }

    // Radio切換的事件處理
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        switch (checkedId) {
        case R.id.rb_talk:
            setTabSelection(0);
            break;
        case R.id.rb_contact:
            setTabSelection(1);
            break;
        case R.id.rb_discovery:
            setTabSelection(2);
            break;
        case R.id.rb_personal:
            setTabSelection(3);
            break;
        }
    }

    private void setTabSelection(int index) {
        // 開啟一個(gè)Fragment事務(wù)
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        // 先隱藏掉所有的Fragment
        hideFragments(transaction);
        switch (index) {
        case 0:
            if (talkFragment == null) {
                // 如果TalkFragment為空,則創(chuàng)建一個(gè)并添加到界面上
                talkFragment = new TalkFragment();
                transaction.add(R.id.fl_content, talkFragment);
            } else {
                // 如果TalkFragment不為空舌胶,則直接將它顯示出來
                transaction.show(talkFragment);
            }
            break;
        case 1:
            if (contactFragment == null) {
                contactFragment = new ContactFragment();
                transaction.add(R.id.fl_content, contactFragment);
            } else {
                transaction.show(contactFragment);
            }
            break;
        case 2:
            if (discoveryFragment == null) {
                discoveryFragment = new DiscoveryFragment();
                transaction.add(R.id.fl_content, discoveryFragment);
            } else {
                transaction.show(discoveryFragment);
            }
            break;
        case 3:
            if (personalFragment == null) {
                personalFragment = new PersonalFragment();
                transaction.add(R.id.fl_content, personalFragment);
            } else {
                transaction.show(personalFragment);
            }
            break;
        }
        transaction.commit();
    }

    /**
     * 將所有的Fragment都置為隱藏狀態(tài)报账。
     * 
     * @param transaction
     *            用于對(duì)Fragment執(zhí)行操作的事務(wù)
     */
    private void hideFragments(FragmentTransaction transaction) {
        if (talkFragment != null) {
            transaction.hide(talkFragment);
        }
        if (contactFragment != null) {
            transaction.hide(contactFragment);
        }
        if (discoveryFragment != null) {
            transaction.hide(discoveryFragment);
        }
        if (personalFragment != null) {
            transaction.hide(personalFragment);
        }
    }
}
  • 04 橫豎屏切換
    如果參考這個(gè)Demo后当宴,在橫豎屏切換時(shí)發(fā)現(xiàn)重疊問題纵势,那么在AndroidManifest.xml文件中做如下設(shè)置踱阿。
    橫豎屏切換時(shí),activity不重新創(chuàng)建吨悍。
<activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:configChanges="orientation|keyboardHidden|screenSize">
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蹋嵌,隨后出現(xiàn)的幾起案子育瓜,更是在濱河造成了極大的恐慌,老刑警劉巖栽烂,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躏仇,死亡現(xiàn)場離奇詭異,居然都是意外死亡腺办,警方通過查閱死者的電腦和手機(jī)焰手,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怀喉,“玉大人书妻,你說我怎么就攤上這事」#” “怎么了躲履?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長聊闯。 經(jīng)常有香客問我工猜,道長,這世上最難降的妖魔是什么菱蔬? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任篷帅,我火速辦了婚禮史侣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘魏身。我一直安慰自己惊橱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布叠骑。 她就那樣靜靜地躺著李皇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宙枷。 梳的紋絲不亂的頭發(fā)上掉房,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音慰丛,去河邊找鬼卓囚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诅病,可吹牛的內(nèi)容都是我干的哪亿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼贤笆,長吁一口氣:“原來是場噩夢啊……” “哼蝇棉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芥永,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤篡殷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后埋涧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體板辽,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年棘催,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劲弦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡醇坝,死狀恐怖邑跪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呼猪,我是刑警寧澤呀袱,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站郑叠,受9級(jí)特大地震影響夜赵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乡革,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一寇僧、第九天 我趴在偏房一處隱蔽的房頂上張望摊腋。 院中可真熱鬧,春花似錦嘁傀、人聲如沸兴蒸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橙凳。三九已至,卻和暖如春笑撞,著一層夾襖步出監(jiān)牢的瞬間岛啸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工茴肥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坚踩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓瓤狐,卻偏偏與公主長得像瞬铸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子础锐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容