Android (FragmentTabHost + RadioGroup) implementa la barra inferior

Contando desde Java, llevo un año estudiando Android. Desde el principio de la información está llena de confusión, no sé por qué? ¿Cambiar a Android? No hay confianza en absoluto. ¿Rendirse? ¿No se desperdició mi arduo trabajo durante un año? Sin chismes.

La mayoría de las aplicaciones tienen una barra de navegación en la parte inferior, como WeChat y QQ. Solía ​​usar textView para agregar algunas cosas desordenadas, el acoplamiento de código es alto, la implementación es complicada y la reutilización es baja. Debido a que las cosas básicas están casi aprendidas, recientemente comencé a contactar algunos proyectos simples y descubrí que el marco es realmente algo bueno. Aunque es más difícil comenzar, es muy conveniente para el mantenimiento posterior, la reutilización del código y la expansión horizontal.

Esta es la barra inferior que extraje de un proyecto de código abierto e implementé con FragmentTabHost + RadioGroup. Está separada para facilitar la búsqueda posterior. Vamos a la imagen primero.
Escriba una descripción de la imagen aquí

Hable brevemente sobre el principio: los tres botones inferiores son RadioGroup, FragmentTabHost está conectado a la vista principal (la pieza más grande en la pantalla) a través del método de configuración, y el método addTab de FragmentTabHost puede agregar Fragment a FragmentTabHost para cambiar la pantalla. Luego, en el monitoreo de eventos de RadioGroup, puede cambiar el Fragmento mostrado a través del método setCurrentTab de FragmentTabHost.

Diseño de actividad:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/frameLayout_nr"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"></FrameLayout>

    <android.support.v4.app.FragmentTabHost
        android:id="@+id/tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"></android.support.v4.app.FragmentTabHost>

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/rbHome"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:checked="true"
            android:drawablePadding="4dp"
            android:drawableTop="@drawable/home"
            android:gravity="center"
            android:text="主页"
            android:textColor="@drawable/text"
            android:textSize="16sp" />

        <RadioButton
            android:id="@+id/rbMessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:drawablePadding="4dp"
            android:drawableTop="@drawable/message"
            android:gravity="center"
            android:text="信息"
            android:textColor="@drawable/text"
            android:textSize="16sp" />

        <RadioButton
            android:id="@+id/rbProfile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:drawablePadding="4dp"
            android:drawableTop="@drawable/profile"
            android:gravity="center"
            android:text="我的"
            android:textColor="@drawable/text"
            android:textSize="16sp" />
    </RadioGroup>
</LinearLayout>

El diseño FrameLayout en el diseño se utiliza para asociar el contenido de visualización FragmentTabHost, que es el bloque más grande en la pantalla mencionada anteriormente.
No hay mucho que decir sobre FragmentTabHost, debe tenerse en cuenta que android: visibilidad = "desaparecido", ya que FragmentTabHost era originalmente un diseño de control deslizante, no queremos mostrar el control deslizante, por lo que FragmentTabHost está oculto de la pantalla. ¿Por qué poner un componente y ocultarlo? Debido a que vamos a usar algunos métodos de FragmentTabHost, en resumen, podemos usar el método setCurrentTab para cambiar y mostrar algunos Fragmentos en FragmentTabHost que asociamos por adelantado. El
siguiente es un RadioGroup, que contiene tres RadioButtons, que son los tres últimos Botón. Entre ellos, android: drawableTop = ”@ drawable / profile” y
android: textColor = ”@ drawable / text” configuran el interruptor de color clave:

Interruptor de estado de imagen

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/ic_tabbar_home_selected" android:state_checked="true"/>
    <item android:drawable="@mipmap/ic_tabbar_home_normal" android:state_checked="false"/>
</selector>

Cambio de estado de texto

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#ffab00" android:state_checked="true"/>
    <item android:color="#000" android:state_checked="false"/>
</selector>

Luego, necesitamos proporcionar tres Fragmentos a los tres RadioButtons. Solo necesitamos mostrar algunas cosas simples para decirnos que la interfaz ha sido cambiada. El código fuente no está publicado.

Entonces actividad

public class MainActivity extends AppCompatActivity{
    private FrameLayout frameLayout_nr;
    private FragmentTabHost tabHost;
    private RadioGroup radioGroup;
    private Class fragments[];
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
        initialize();
    }
    private void initialize(){
        fragments = new Class[]{HomeFragment.class,MessageFragment.class,ProfileFragment.class};
        frameLayout_nr = (FrameLayout)findViewById(R.id.frameLayout_nr);
        tabHost = (FragmentTabHost) findViewById(R.id.tab);
        radioGroup = (RadioGroup) findViewById(R.id.radioGroup);

        tabHost.setup(getApplicationContext(),getSupportFragmentManager(),R.id.frameLayout_nr);  //tabHost关联上下文,FragmentManager和显示区域
        for (int i = 0; i < fragments.length ; i++) {   //向TabHost中添加fragment和标志位
            TabHost.TabSpec tabSpec = tabHost.newTabSpec(String.valueOf(i)).setIndicator(String.valueOf(i));
            tabHost.addTab(tabSpec,fragments[i],null);
        }
        tabHost.setCurrentTab(0);//设置初始选中项
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId){
                    case R.id.rbHome:
                        tabHost.setCurrentTab(0);
                        break;
                    case R.id.rbMessage:
                        tabHost.setCurrentTab(1);
                        break;
                    case R.id.rbProfile:
                        tabHost.setCurrentTab(2);
                        break;
                }
            }
        });
    }
}

Ahora ejecute su código y verá el efecto que se muestra en la imagen al principio. Pruébalo ahora!

¡El viaje de mil millas comienza con un paso!

Publicado 34 artículos originales · Me gusta 10 · Visitas 30,000+

Supongo que te gusta

Origin blog.csdn.net/q296264785/article/details/73275678
Recomendado
Clasificación