O Android (FragmentTabHost + RadioGroup) implementa a barra inferior

Contando com o java, estudo o Android há um ano. Desde o início da informação está cheia de confusão, não sei por quê? Mudar para o Android? Sem confiança alguma. Desistir? Meu trabalho duro durante um ano não foi desperdiçado? Nenhuma fofoca.

A maioria dos aplicativos tem uma barra de navegação na parte inferior, como WeChat e QQ. Eu costumava usar o textView para adicionar algumas coisas bagunçadas, o acoplamento de código é alto, a implementação é complicada e a reutilização é baixa. Como as coisas básicas estão quase aprendidas, recentemente começou a entrar em contato com alguns projetos simples e descobriu que a estrutura é realmente uma coisa boa. Embora seja mais difícil começar, é muito conveniente para manutenção posterior, reutilização de código e expansão horizontal ...

Esta é a barra inferior que extraí de um projeto de código aberto e implementei com o FragmentTabHost + RadioGroup e é separada para facilitar a pesquisa posterior. Vamos para a foto primeiro.
Escreva uma descrição da imagem aqui

Fale brevemente sobre o princípio: os três botões inferiores são RadioGroup, o FragmentTabHost é conectado à visualização principal (a maior parte da tela) através do método de configuração, e o método addTab do FragmentTabHost pode adicionar Fragment ao FragmentTabHost para alternar a exibição. Em seguida, no monitoramento de eventos do RadioGroup, você pode alternar o Fragmento exibido pelo método setCurrentTab de FragmentTabHost.

Layout da atividade:

<?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>

O layout FrameLayout no layout é usado para associar o conteúdo de exibição FragmentTabHost, que é o maior bloco na tela mencionada acima.
Não há muito o que dizer sobre o FragmentTabHost, deve-se notar que o android: visibilidade = "foi", porque o FragmentTabHost era originalmente um layout de slider, não queremos exibir o slider, portanto o FragmentTabHost fica oculto na exibição. Por que colocar um componente e ocultá-lo? Como vamos usar alguns métodos do FragmentTabHost, em resumo, podemos usar o método setCurrentTab para alternar e exibir alguns fragmentos no FragmentTabHost que associamos com antecedência.O
próximo é um RadioGroup, que contém três RadioButtons, que são os três na parte inferior que vemos Botão Entre eles, android: drawableTop = ”@ drawable / profile” e
android: textColor = ”@ drawable / text” definem a chave de cor:

Interruptor de status da imagem

<?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>

Troca 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>

Em seguida, precisamos fornecer três fragmentos para os três botões de opção.Nós precisamos apenas exibir algumas coisas simples para dizer a nós mesmos que a interface foi alterada.O código fonte não é publicado.

Então Atividade

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;
                }
            }
        });
    }
}

Agora execute seu código e você verá o efeito mostrado na figura no início. Experimente agora!

A jornada de mil milhas começa com um passo!

Publicado 34 artigos originais · Gosto 10 · Visitas 30.000+

Acho que você gosta

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