Contoh Serpihan - Pelaksanaan Bar Navigasi Bawah (Kaedah 2)
Pengenalan kepada bahagian ini:
Dalam bahagian sebelumnya kami menggunakan LinearLayout + TextView untuk mencapai kesan bar navigasi bawah Kami perlu menetapkan semula setiap kali kami mengklik Status semua TextViews, dan kemudian memilih TextView yang diklik agak menyusahkan, bukan? RadioGroup + RadioButton untuk mencapai kesan bahagian kami yang terdahulu!
1. Beberapa pemikiran rawak
Bahagian ini menggunakan RadioButton untuk mencapai kesan pemilihan radio Jika anda tidak biasa dengannya atau belum pernah menggunakannya, anda boleh gerakkannya dahulu Langkah ke: RadioButtonRingkasnya, kami mempunyai RadioGroup membalut empat RadioButtons, dibahagikan dengan nisbah yang sama seperti sebelumnya: 1:1:1:1>Selain itu, kami sahaja perlu menulis semula RadioGroup OnCheckedChange, menilai checkid untuk mengetahui RadioButton yang telah diklik!
Baiklah, mari mula menyusun!
2. Proses pelaksanaan
PS: Bahan-bahan di sini digunakan secara langsung daripada bahan-bahan di bahagian sebelumnya! Selain itu, sumber kelas boleh lukis semuanya dipilih Status ditukar kepada disemak!
Langkah 1: Tulis beberapa fail sumber untuk pilihan bawah Sumber Gambar Boleh Lukis:
tab_menu_channel.xml
< ; item android:drawable="@mipmap/tab_channel_pressed" android:state_checked="true" />
>
Tiga yang lain mengikutinya!
tab_menu_text.xml
<?xml version="1.0" encoding="utf-8"?>
< ;selector xmlns:android="http://schemas.android.com/apk/res/android"></selector>
背景资源:tab_menu_bg.xml
<selector :android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape>
; sol id android:color="#FFC4C4C4" />
</shape>
</item>
<item>
; shape & ; <solid android:color ="@color/transparent" />
</shape>
</item>
</selector>
Langkah 2: Tulis reka letak Aktiviti kami
Apabila kami menggunakan TextView untuk melaksanakan bar navigasi bahagian bawah, kami menemui masalah Sifat setiap TextView adalah hampir sama. , dan dalam cadangan, kami juga meminta semua orang mengekstrak atribut yang sama dan menulisnya ke dalam Gaya Mungkin sesetengah rakan malas atau tidak tahu. Cara mengekstrak dan menggunakannya, inilah demonstrasi untuk anda:
android:button="@null" android:paddingTop="3dp"
android:text="@string /tab_menu_alert"我们可以把每个RadioButton都相同的属性抽取出来,写到style.xml文件中;><🎜item_><🎜 ">
<item name="android:layout_width">0dp</item><item name="android:background">@drawable/tab_menu_bg</item>
<item name="<t;button" /item>
<item name="android:gravity">center</item>
<item name="android:paddingTop">3dp</item>
nama tem< ="android:textColor">@drawable/tab_menu_text</item>
<item name="android:textSize">18sp</item>
</style>
><🎜
Kemudian RadioButton dalam activity_main.xml kami tidak perlu menulis kod yang sama setiap kali. Hanya buat RadioButton style="@style/tab_menu_item" dan itu sahaja!
activity_main.xml:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="../style/images/bg_gray"
tools:context=""&Maint
<RelativeLayout
android:id="@+id/ly_top_bar"
android:layout_width="match_parent"
android 🎜> android 🎜 android : latar belakang = "../ gaya/imej/bg_topbar" & gt;
& lt; textview
android: id = "@+id/txt_topbar"
android: Layout_width = "match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:gravity="center"<🎜 > android:textColor="@color/text_topbar "
android:textSize="18sp" />
<Lihat
android:layout_width="match_parent" tersebut 🎜> android:layout_alignParentBottom= "benar"
android:background="../style/images/div_white" />
</RelativeLayout>
< Radio "@+id/rg_tab_bar"
android:layout_width="match_parent"
android:layout_height="56dp"
Android: Layout_AlignParentBottom = "True"
Android: latar belakang = "../ gaya/imej/bg_white"
android: orientation = "mendatar" & gt; id="@+id/rb_channel"
style="@style/tab_menu_item"
id ;
<RadioButton
android:id="@+id/rb_message"
style="@style/tab_menu_item"@ drad_item boleh tab_menu_message"
android :text="@string/tab_menu_profile" />
<RadioButton
android:id="@+id/rb_better"
style android :drawableTop="@drawable/tab_menu_better"
android:text="@string/tab_menu_pay" />
<RadioButton<🎜 > id id > style="@style/tab_menu_item"
android:drawableTop="@drawable/ta b_menu_setting"
android RadioGroup>
<Lihat
android:id="@+id/div_tab_bar"
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_above="@id/rg_tab_bar"
android:background="../style/images/div_white" />
<FrameLayout
android:id="@+id/ly_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/div_tab_bar"
android :layout_below="@id/ly_top_bar"></FrameLayout>
</RelativeLayout>
Langkah 3: Sembunyikan bar navigasi atas<🎜
AndroidManifest.xml menetapkan atribut tema
Langkah 4: Buat susun atur mudah dan kelas Fragmen: Salin terus susun atur dan Fragmen bahagian sebelumnya:
fg_content.xml:
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="../style/images/bg_white">
<TextView
android:id="@+id/txt_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Hey"
android:textColor="@color/text_yellow"
android:textSize="20sp"/>
</LinearLayout>
MyFragment.java:
* Dibuat oleh Coder-pig pada 2015/8/29 0028.
*/
kelas awam MyFragment melanjutkan Fragment {
peribadi; Rentetan kandungan 🎜> public MyFragment(String content) {
this.content = content;
}
@Override
” Himpunan simpanInstanceState) {
Lihat pandangan = inflater.inflate(R.layout.fg_content,container,false);
TextView txt_content = (TextView) view.findViewById(R.id.txt_content);
set txt > pandangan kembali;
}
}
Langkah 5: Tulis MainActivity.java
Ini jauh lebih mudah daripada pelaksanaan TextView, jadi saya tidak akan menerangkannya secara terperinci, cuma pergi ke kod:
MainActivity.java
* Dibuat oleh Coder-pig pada 2015/8/29 0028.
*/
kelas awam MainActivity melanjutkan AppCompatActivity melaksanakan RadioGroup.OnCheckedChangeBustener{
peribadi RadioGroup_t bar
//Fragment Object
pribadi MyFragment fg1,fg2,fg3,fg4;
pribadi FragmentManager fManager;
@Override
dilindungi 🎜> super.onCreate( savedInstanceState);
setContentView(R.layout.activity_main);
fManager = getFragmentManager();
rg_tab_bar = (RadioGroup Ind. >bar = (RadioGroup Id. rg_tab_bar.setOnCheckedChangeListener(this) ;
//获取第一个单选按钮,并设置其为选中状态
rb_chan nel = )(d_Radionel = )(d. > rb_channel.setChecked(true);
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
FragmentTransaction fTransaction f Transaction = fTransaction ); ragment(fTransaction);
suis (checkedId){
kes R.id.rb_channel:
jika(fg1 = null){
f ragment");
fTransaction.add(R. id.ly_content,fg1);
}lain{
fTransaction.show(fg1);
}
rehat;
kes R.id.rb_message:
jika(fg2 == null){< baru MyFragment("第二个Fragment");
fTransaction.add( R.id.ly_content,fg2);
}lain{
fTransaction.show(fg2);
kes R.id.rb_lebih baik:
jika(fg3 == null) {
ftransaction.add (r.id.ly_content, fg3); fg3);
}lain{
fTransaction.show(fg4);
}
//Sembunyikan semua Fragmen
private void hideAllFragment (FragmentTransaction fragmentTransaction){
if(fg1 != null)fragmentTransaction.hide(fg1>);<🎜 if(fg2 != null)fragmentTransaction.hide(fg2);
if(fg3 != null)frag mentTransaction .hide(fg3);
if(fg4 != null) fragmentTransaction.hide(fg4);
}
}
PS:
Saya terlupa untuk menyebut sesuatu di bahagian sebelumnya hanya boleh digunakan sekali dan FragmentManager mesti dipanggil setiap masa ia digunakan. Kaedah beginTransaction() memperoleh objek transaksi FragmentTransaction!
Malah, kesan yang dicapai dalam bahagian sebelumnya adalah sama:
4. Muat turun kod:
FragmentDemo2.zip
:FragmentDemo2.zip muat turun
5. Ringkasan bahagian ini: Bahagian ini menerangkan kaedah kedua untuk melaksanakan bar navigasi bawah: RadioGroup + RadioButton Dengan pemilihan radio, kami Tidak perlu menetapkan semula status Terpilih bagi semua TextViews selepas setiap klik, seperti TextView, dan kemudian biarkan TextView yang diklik Dipilih adalah benar, jadi anda boleh menulis kurang kod~Itu sahaja untuk bahagian ini~Terima kasih