有人知道如何从夸大的布局中隐藏组件吗? 我有以下代码:
View tabLayout = LayoutInflater.from(this).inflate(R.layout.tab_layout, null);
FrameLayout profile_tab_selected_indicator =
(FrameLayout)tabLayout.findViewById(R.id.profile_tab_selected_indicator);
当我试图隐藏它时使用:
profile_tab_selected_indicator.setVisibility(View.GONE);
它不起作用。看起来我错过了某些东西,或者无法从膨胀的布局中隐藏xml组件。我还尝试通过0dp
将宽度和高度设置为LayoutParams
,但它也不起作用。
在onCreate()
之外的自定义函数中,如下所示:
public static View tabLayout;
protected void onCreate(){
//some code here
buildTabLayout();
}
public void buildTabLayout(){
tabLayout = LayoutInflater.from(this).inflate(R.layout.tab_layout, null);
}
然后我试图隐藏它:
public void onTabChanged(String tabId) {
FrameLayout profile_tab_selected_indicator = (FrameLayout)tabLayout.findViewById(R.id.profile_tab_selected_indicator);
profile_tab_selected_indicator.setVisibility(View.GONE);
}
这是膨胀布局的xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/profile_tab_bar_bg"
android:gravity="center"
android:orientation="vertical" >
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/profile_top_bar_shadow_xml" >
</FrameLayout>
<ImageView
android:id="@+id/iv_tabIcon"
android:layout_width="30dp"
android:layout_height="30dp" />
<TextView
android:id="@+id/tv_tabTitle"
style="@style/ProfileTabLabelsStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/profile_tab_label_selector" />
<FrameLayout
android:id="@+id/profile_tab_selected_indicator"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@color/ProfileTabSelected" >
</FrameLayout>
</LinearLayout>
编辑:
负责我的标签布局的所有代码:
// tabs labels
public static String[] tabsTitles = new String[] { "PROFILE", "CAMPAIGNS",
"STATISTICS" };
public static View tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.vw_profile);
// initializing xml components
init();
// Tab Layut builder
buildTabLayout();
}
private void buildTabLayout() {
// TODO Auto-generated method stub
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
tabHost.setOnTabChangedListener(this);
TabHost.TabSpec spec; // Resusable TabSpec for each tab
View tabLayout; // tabLayout
Intent intent; // Reusable Intent for each tab
// PROFILE TAB
tabLayout = createTabLayout(this, tabsTitles[0]);
intent = new Intent().setClass(this, VieweedsProfileTabActivity.class);
spec = tabHost.newTabSpec(tabsTitles[0]).setIndicator(tabLayout)
.setContent(intent);
tabHost.addTab(spec);
// CAMPAIGNS TAB
tabLayout = createTabLayout(this, tabsTitles[1]);
intent = new Intent()
.setClass(this, VieweedsCampaignsTabActivity.class);
spec = tabHost.newTabSpec(tabsTitles[1]).setIndicator(tabLayout)
.setContent(intent);
tabHost.addTab(spec);
// STATISTICS TAB
tabLayout = createTabLayout(this, tabsTitles[2]);
intent = new Intent().setClass(this,
VieweedsStatisticsTabActivity.class);
spec = tabHost.newTabSpec(tabsTitles[2]).setIndicator(tabLayout)
.setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
}
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
FrameLayout profile_tab_selected_indicator = (FrameLayout)tabLayout.findViewById(R.id.profile_tab_selected_indicator);
FrameLayout campaigns_tab_selected_indicator = (FrameLayout)tabLayout.findViewById(R.id.campaigns_tab_selected_indicator);
if (tabId.equals(tabsTitles[0])) {
// profile tab
Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
profile_tab_selected_indicator.setVisibility(View.VISIBLE);
campaigns_tab_selected_indicator.setVisibility(View.GONE);
} else if (tabId.equals(tabsTitles[1])) {
// campaigns tab
Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
profile_tab_selected_indicator.setVisibility(View.GONE);
campaigns_tab_selected_indicator.setVisibility(View.VISIBLE);
} else {
Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
// statistics tab
}
}
// creating tab layout for each tab
public static View createTabLayout(Context c, String tabTitleText){
tabLayout = LayoutInflater.from(c).inflate(R.layout.tab_layout, null);
TextView tabTitle = (TextView)tabLayout.findViewById(R.id.tv_tabTitle);
tabTitle.setTypeface(arial);
ImageView tabIcon = (ImageView)tabLayout.findViewById(R.id.iv_tabIcon);
tabTitle.setText(tabTitleText);
//assigning tab icons for each tab
if(tabTitleText.equals(tabsTitles[0])){
//profile tab
tabIcon.setImageResource(R.drawable.profile_tab_bar_profile_tab_icon);
}else if(tabTitleText.equals(tabsTitles[1])){
//campaigns tab
tabIcon.setImageResource(R.drawable.profile_tab_bar_campaigns_tab_icon);
}else{
//statistics tab
tabIcon.setImageResource(R.drawable.profile_tab_bar_statistics_tab_icon);
}
return tabLayout;
}
答案 0 :(得分:0)
你的代码中有些问题。我不知道你为什么选择在课堂上tabLayout
作为一个字段,但是这样做tabLayout
将指向你设置的最后一个标签指示符( STATISTICS < / em> tab)。由于tabLayout
仅指向最后一个标签,因此在onTabChanged
回调中不会发生任何事情(因为您没有对最后一个标签执行任何操作)。
我建议您更改onTabChanged
方法并直接使用getChildTabViewAt
搜索标签视图,以确保您在正确的位置搜索FrameLayout
:< / p>
public void onTabChanged(String tabId) {
// the first tab view
View tab1 = getTabWidget().getChildTabViewAt(0);
FrameLayout profile_tab_selected_indicator = (FrameLayout)tab1.findViewById(R.id.profile_tab_selected_indicator);
// the second tab view
View tab2 = getTabWidget().getChildTabViewAt(1);
// where does this come from?!?! it is in the second tab?!?!
FrameLayout campaigns_tab_selected_indicator = (FrameLayout)tab2.findViewById(R.id.campaigns_tab_selected_indicator);
// the third tab view
View tab3 = getTabWidget().getChildTabViewAt(2);
if (tabId.equals(tabsTitles[0])) {
// profile tab
Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
profile_tab_selected_indicator.setVisibility(View.VISIBLE);
campaigns_tab_selected_indicator.setVisibility(View.GONE);
} else if (tabId.equals(tabsTitles[1])) {
// campaigns tab
Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
profile_tab_selected_indicator.setVisibility(View.GONE);
campaigns_tab_selected_indicator.setVisibility(View.VISIBLE);
} else {
Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
// statistics tab
}
}