I am using a TabHost to hold 3 fragments and have created a method that sets the Tab selected/unselected background colors. The background colors are drawn using a drawable xml file. The problem that I am getting is when a tab is selected, the width is adjusted for the actual tab buttons. They need to stay the same size no matter what. How would this be fixed?
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void setSelectedTabColor() {
RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
rllp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
rllp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
int textSize = 22;
int current = mTabHost.getCurrentTab();
for (int i = 0; i < mTabHost.getTabWidget().getChildCount(); i++) {
TextView txt = (TextView) mTabHost.getTabWidget().getChildAt(i)
.findViewById(android.R.id.title);
txt.setTextSize(textSize);
txt.setTypeface(font);
txt.setLayoutParams(rllp);
txt.setGravity(Gravity.RIGHT);
mTabHost.getTabWidget().getChildAt(i).getLayoutParams().height = 100;
if (i == current) {
mTabHost.getTabWidget().getChildAt(i)
.setBackgroundResource(R.drawable.button_type1_active);
} else {
mTabHost.getTabWidget().getChildAt(i)
.setBackgroundResource(R.drawable.button_type1);
txt.setTextColor(Color.WHITE);
}
}
}
button_type1.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><layer-list>
<item><shape>
<!-- Gradient Bg for Button -->
<gradient android:angle="270" android:endColor="@color/button_type1_pushed" android:startColor="@color/button_type1_pushed" />
<stroke android:width="0.05dp" android:color="@color/button_type1_border" />
</shape></item>
</layer-list></item>
<item android:state_enabled="true"><layer-list>
<item><shape android:shape="rectangle">
<gradient android:angle="90" android:endColor="@color/button_type1_normal" android:startColor="@color/button_type1_normal" />
<stroke android:width="0.05dp" android:color="@color/button_type1_border" />
</shape></item>
</layer-list></item>
button_type1_active.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><layer-list>
<item><shape>
<!-- Gradient Bg for Button -->
<gradient android:angle="270" android:endColor="@color/button_type1_pushed" android:startColor="@color/button_type1_pushed" />
<stroke android:width="0.05dp" android:color="@color/button_type1_border" />
</shape></item>
</layer-list></item>
<item android:state_enabled="true"><layer-list>
<item><shape android:shape="rectangle">
<gradient android:angle="90" android:endColor="@color/button_type1_active" android:startColor="@color/button_type1_active" />
<stroke android:width="0.05dp" android:color="@color/button_type1_border" />
</shape></item>
</layer-list></item>
This is the code that was used to fix the problem. Setting the padding for the parent View to 0 was necessary:
private void setSelectedTabColor() {
RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
rllp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
rllp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
int textSize = 22;
final WindowManager.LayoutParams params = getWindow().getAttributes();
View currentView;
int current = mTabHost.getCurrentTab();
for (int i = 0; i < mTabHost.getTabWidget().getChildCount(); i++) {
TextView txt = (TextView) mTabHost.getTabWidget().getChildAt(i)
.findViewById(android.R.id.title);
txt.setTextSize(textSize);
txt.setTypeface(font);
txt.setLayoutParams(rllp);
txt.setGravity(Gravity.RIGHT | Gravity.BOTTOM);
currentView = mTabHost.getTabWidget().getChildAt(i);
LinearLayout.LayoutParams currentLayout = (LinearLayout.LayoutParams) currentView
.getLayoutParams();
currentLayout.setMargins(0, 0, 0, 0);
currentView.setPadding(0, 0, 0, 0);
currentView.setLayoutParams(currentLayout);
currentView.getLayoutParams().height = 100;
if (i == current) {
mTabHost.getTabWidget().getChildAt(i)
.setBackgroundResource(R.drawable.button_type1_active);
txt.setBackgroundResource(R.drawable.button_type1_active);
} else {
mTabHost.getTabWidget().getChildAt(i)
.setBackgroundResource(R.drawable.button_type1);
txt.setBackgroundResource(R.drawable.button_type1);
txt.setTextColor(Color.WHITE);
}
if(i==0||i==1){
txt.setPadding(0, 0, 5, 0);
}
}
}