我希望有一个标签式界面,所有标签随时都可见。
我无法在创建的标签之间拆分屏幕宽度,以免它们溢出(请参阅第二次屏幕截图)。基于这个(Change tab width in ActionBar.Tab)SO问题和讨论,我使用了那里提出的解决方案作为基础。函数“setMaxWidth()”可用于限制视图宽度。通过将每个标签限制为屏幕宽度的一部分,它们应该都适合。
setMaxWidth(screenWidth*tabTextSize[i]/tabTextSizeSum);
但要实现这一点,我需要进入所有标签的视图。我尝试使用setCustomview(layoutResId)
为每个标签执行此操作,然后通过getCustomView()
与他们联系。但结果(如屏幕截图1中所示)导致标签文本为文字“假”。
那么,有没有办法缩放标签以适应屏幕而不会溢出?
Screenshot1 http://i68.tinypic.com/1567o9k.png
很难看到,但有6个标签,约占动作栏区域的2/3,每个标签中都有“假”字样。
Screenshot2 http://i64.tinypic.com/2jcahw2.png
如果删除了标签具有customView集和最后一个for循环的行,则标签看起来不错,除非不适合屏幕。
package com.example;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.app.Activity;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
public class MainActivity extends Activity {
// Declare Tab Variable
ActionBar.Tab TabTool, TabSchedule, TabMessage, TabTNT, TabAlarm, TabOverview;
Fragment fragmentTool = new FragmentTabToolChange();
Fragment fragmentSchedule = new FragmentTabSchedule();
Fragment fragmentMessage = new FragmentTabMessage();
Fragment fragmentTNT= new FragmentTabTNT();
Fragment fragmentAlarm = new FragmentTabAlarm();
Fragment fragmentOverview = new FragmentTabOverview();
DisplayMetrics displaymetrics = new DisplayMetrics();
int screenWidth;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
screenWidth = displaymetrics.widthPixels;
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
ActionBar actionBar = getActionBar();
// Hide Actionbar Icon
actionBar.setDisplayShowHomeEnabled(false);
// Hide Actionbar Title
actionBar.setDisplayShowTitleEnabled(false);
// Set Tab Icon and Titles
TabTool = actionBar.newTab().setText(R.string.toolText);
TabSchedule = actionBar.newTab().setText(R.string.scheduleText);
TabMessage = actionBar.newTab().setText(R.string.messageText);
TabTNT = actionBar.newTab().setText(R.string.tntText);
TabAlarm = actionBar.newTab().setText(R.string.alarmText);
TabOverview = actionBar.newTab().setText(R.string.overviewText);
// Set Tab Listeners
TabTool.setTabListener(new TabListener(fragmentTool));
TabSchedule.setTabListener(new TabListener(fragmentSchedule));
TabMessage.setTabListener(new TabListener(fragmentMessage));
TabTNT.setTabListener(new TabListener(fragmentTNT));
TabAlarm.setTabListener(new TabListener(fragmentAlarm));
TabOverview.setTabListener(new TabListener(fragmentOverview));
View toolView = findViewById(R.id.toolTextView);
TabTool.setCustomView(toolView);
TabSchedule.setCustomView(findViewById(R.id.scheduleTextView));
TabMessage.setCustomView(findViewById(R.id.messageTextView));
TabTNT.setCustomView(findViewById(R.id.tntTextView));
TabAlarm.setCustomView(findViewById(R.id.alarmTextView));
TabOverview.setCustomView(findViewById(R.id.overViewTextView));
// Add tabs to actionbar
actionBar.addTab(TabTool);
actionBar.addTab(TabSchedule);
actionBar.addTab(TabMessage);
actionBar.addTab(TabTNT);
actionBar.addTab(TabAlarm);
actionBar.addTab(TabOverview);
// Scale tab widths to fit window
View tabView = actionBar.getTabAt(0).getCustomView();
final int tabSize = actionBar.getTabCount();
final int[] tabTextSize = new int[tabSize];
int tabTextSizeSum = 0;
for (int i = 0; i < tabSize; i++)
{
tabTextSize[i] = actionBar.getTabAt(i).getText().length();
tabTextSizeSum += tabTextSize[i];
}
for (int i = 0; i < tabSize; i++)
{
TextView tab = (TextView) actionBar.getTabAt(i).getCustomView();
tab.setMaxWidth(screenWidth*tabTextSize[i]/tabTextSizeSum);
}
// Create Actionbar Tabs
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/toolTextView"
android:layout_width="wrap_content"
android:layout_height="71dp"
android:text="@+id/string.toolText" />
<TextView
android:id="@+id/scheduleTextView"
android:layout_width="wrap_content"
android:layout_height="71dp"
android:text="@+id/string.scheduleText" />
<TextView
android:id="@+id/messageTextView"
android:layout_width="wrap_content"
android:layout_height="71dp"
android:text="@+id/string.messageText"/>
<TextView
android:id="@+id/tntTextView"
android:layout_width="wrap_content"
android:layout_height="71dp"
android:text="@+id/string.tntText" />
<TextView
android:id="@+id/alarmTextView"
android:layout_width="wrap_content"
android:layout_height="71dp"
android:text="@+id/string.alarmText" />
<TextView
android:id="@+id/overViewTextView"
android:layout_width="wrap_content"
android:layout_height="71dp"
android:text="@+id/string.overviewText" />
</FrameLayout>
AndroidStudio版本:1.5.1
Android SDK版本:19
buildToolsVersion 23.0.1