TabHost 的替代品
Alternative of TabHost
如您所见,我使用了 TabLayout
、TabHost
。我在前两张图片中使用了 TabLayout
。在第三张图片中,我使用了 TabHost
。通常,TabLayout
看起来比 TabHost
/TabWidget
好。TabHost as you can see TabHost
is deprecated. So, It would be better if I don't use TabHost
. TabLayout
isn't deprecated. Here is a question 我问过有人说它是重复的。我以为是。看,当我使用 ViewPager
和 TabLayout
时,我不能直接在 MainActivity
中使用那些 layout
我的意思是我必须在那些 framgents
中编写源代码class 就在那里工作。但是,当我使用 TabHost
、TabWidget
和 TabContent
时,我可以直接在 MainActivity
中使用那些 layouts
我不必在其他地方编写源代码.就像我在 ViewPager
或 Fragments
中使用的那样。所以,就是TabLayout
和TabHost
之间的问题。而且,TabHost
或 TabWidget
不可滚动,这意味着我无法像在 TabLayout
中那样滚动 TabWidget
。又出现了一个问题。所以,TabLayout
和 TabHost
是不一样的。所以,如果我不使用 TabLayout
替代 Tabhost
.
会更好
在我的项目中,我需要像 TabLayout
这样的可滚动选项卡,并且我必须从我的 MainActivity
访问这些布局。所以,我不能使用 TabLayout
。尽管我尝试使用它。但是,是否有任何可能的方法只使用 ViewPager
内的布局并从 MainActivity
.
访问这些布局
我问的这个问题太糟糕了。有更好的方法来做到这一点。我在想该怎么做。然后,我使用了 TabLayout
和 FrameLayout
。我认为 FrameLayout
会在没有第一个 layout
的情况下隐藏其他线性布局。然后,我添加到我的 activity_main.xml
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tab_layout">
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="TextView" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
<LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/textView4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:id="@+id/tab3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
</FrameLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.tabs.TabItem
android:id="@+id/tabitem1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Monday" />
<com.google.android.material.tabs.TabItem
android:id="@+id/tabitem2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tuesday" />
<com.google.android.material.tabs.TabItem
android:id="@+id/tabitem3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wednesday" />
</com.google.android.material.tabs.TabLayout>
但是,FrameLayout
并没有像我想的那样工作。于是,我又泄气了。但是,我一直在想它。我没有删除任何东西。然后,我想到了另一件事。如果我在没有第一个的情况下隐藏其他 linearLayout
怎么办?我认为 Framelayout
应该如何工作。然后,我设置 LinearLayout
Visibility = "GONE"
.
LinearLayout l1 = findViewById(R.id.tab1);
LinearLayout l2 = findViewById(R.id.tab2);
LinearLayout l3 = findViewById(R.id.tab3);
TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.d("TAB_POSITION", String.valueOf(tab.getPosition()));
if (tab.getPosition()==0){
l1.setVisibility(View.VISIBLE);
if (l2.getVisibility()==View.GONE){
}else{
l2.setVisibility(View.GONE);
}
if (l3.getVisibility()==View.GONE){
}else{
l3.setVisibility(View.GONE);
}
}else if (tab.getPosition()==1){
l2.setVisibility(View.VISIBLE);
if (l1.getVisibility()==View.GONE){
}else{
l1.setVisibility(View.GONE);
}
if (l3.getVisibility()==View.GONE){
}else{
l3.setVisibility(View.GONE);
}
}else if (tab.getPosition()==2){
l3.setVisibility(View.VISIBLE);
if (l2.getVisibility()==View.GONE){
}else{
l2.setVisibility(View.GONE);
}
if (l1.getVisibility()==View.GONE){
}else{
l1.setVisibility(View.GONE);
}
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
因此,当我单击另一个 tabs
时,它隐藏了其他没有主要布局的布局。所以,它对我有用。我别无选择。我会说这是我的答案。
如您所见,我使用了 TabLayout
、TabHost
。我在前两张图片中使用了 TabLayout
。在第三张图片中,我使用了 TabHost
。通常,TabLayout
看起来比 TabHost
/TabWidget
好。TabHost as you can see TabHost
is deprecated. So, It would be better if I don't use TabHost
. TabLayout
isn't deprecated. Here is a question 我问过有人说它是重复的。我以为是。看,当我使用 ViewPager
和 TabLayout
时,我不能直接在 MainActivity
中使用那些 layout
我的意思是我必须在那些 framgents
中编写源代码class 就在那里工作。但是,当我使用 TabHost
、TabWidget
和 TabContent
时,我可以直接在 MainActivity
中使用那些 layouts
我不必在其他地方编写源代码.就像我在 ViewPager
或 Fragments
中使用的那样。所以,就是TabLayout
和TabHost
之间的问题。而且,TabHost
或 TabWidget
不可滚动,这意味着我无法像在 TabLayout
中那样滚动 TabWidget
。又出现了一个问题。所以,TabLayout
和 TabHost
是不一样的。所以,如果我不使用 TabLayout
替代 Tabhost
.
在我的项目中,我需要像 TabLayout
这样的可滚动选项卡,并且我必须从我的 MainActivity
访问这些布局。所以,我不能使用 TabLayout
。尽管我尝试使用它。但是,是否有任何可能的方法只使用 ViewPager
内的布局并从 MainActivity
.
我问的这个问题太糟糕了。有更好的方法来做到这一点。我在想该怎么做。然后,我使用了 TabLayout
和 FrameLayout
。我认为 FrameLayout
会在没有第一个 layout
的情况下隐藏其他线性布局。然后,我添加到我的 activity_main.xml
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tab_layout">
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="TextView" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
<LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/textView4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:id="@+id/tab3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
</FrameLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.tabs.TabItem
android:id="@+id/tabitem1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Monday" />
<com.google.android.material.tabs.TabItem
android:id="@+id/tabitem2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tuesday" />
<com.google.android.material.tabs.TabItem
android:id="@+id/tabitem3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wednesday" />
</com.google.android.material.tabs.TabLayout>
但是,FrameLayout
并没有像我想的那样工作。于是,我又泄气了。但是,我一直在想它。我没有删除任何东西。然后,我想到了另一件事。如果我在没有第一个的情况下隐藏其他 linearLayout
怎么办?我认为 Framelayout
应该如何工作。然后,我设置 LinearLayout
Visibility = "GONE"
.
LinearLayout l1 = findViewById(R.id.tab1);
LinearLayout l2 = findViewById(R.id.tab2);
LinearLayout l3 = findViewById(R.id.tab3);
TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.d("TAB_POSITION", String.valueOf(tab.getPosition()));
if (tab.getPosition()==0){
l1.setVisibility(View.VISIBLE);
if (l2.getVisibility()==View.GONE){
}else{
l2.setVisibility(View.GONE);
}
if (l3.getVisibility()==View.GONE){
}else{
l3.setVisibility(View.GONE);
}
}else if (tab.getPosition()==1){
l2.setVisibility(View.VISIBLE);
if (l1.getVisibility()==View.GONE){
}else{
l1.setVisibility(View.GONE);
}
if (l3.getVisibility()==View.GONE){
}else{
l3.setVisibility(View.GONE);
}
}else if (tab.getPosition()==2){
l3.setVisibility(View.VISIBLE);
if (l2.getVisibility()==View.GONE){
}else{
l2.setVisibility(View.GONE);
}
if (l1.getVisibility()==View.GONE){
}else{
l1.setVisibility(View.GONE);
}
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
因此,当我单击另一个 tabs
时,它隐藏了其他没有主要布局的布局。所以,它对我有用。我别无选择。我会说这是我的答案。