我有一个垂直LinearLayout
,里面有2 TextSwitcher
。有时只显示第一个(@+id/ts1
),有时它们都会在屏幕上显示。 ts1
的字体大小为20,ts2
的字体大小为16。
<LinearLayout
android:id="@+id/linearLayout1"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:gravity="center_vertical"
android:focusable="false"
android:layout_marginLeft="@dimen/dimen_left1"
android:visibility="gone">
<TextSwitcher
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:id="@+id/ts1"/>
<TextSwitcher
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:id="@+id/ts2"/>
</LinearLayout>
当我测试它时,当它们都在屏幕上显示时,它工作正常,但是当只有ts1显示时,文本不是垂直居中,而是更像是在垂直顶部而不是中心的。我以编程方式设置了这两个TextSwitchers
的可见性。
有谁知道为什么会这样?
感谢!!!
答案 0 :(得分:2)
在layout_gravity
上设置TextSwitchers
不会更改基础android:gravity
的文字TextView
。您可以通过将TextView
放在XML中来覆盖TextSwitcher
使用的默认android:layout_gravity
。在那里,您可以在其上设置android:gravity
或<TextSwitcher
android:id="@+id/ts1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" />
</TextSwitcher>
<TextSwitcher
android:id="@+id/ts2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" />
</TextSwitcher>
以使文本垂直居中。这应该有效:
{{1}}
答案 1 :(得分:2)
您需要将重力选项添加到TextView,而不是TextSwitcher。 例如,您可以动态添加layout_width,layout_height和gravity选项。
mSwitcher1 = (TextSwitcher) findViewById(R.id.textSwitcher1);
mSwitcher1.setFactory(new ViewSwitcher.ViewFactory() {
public View makeView() {
TextView myText = new TextView(MainActivity.this);
myText.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
myText.setTextSize(36);
myText.setTextColor(Color.BLUE);
// Add this
myText.setGravity(Gravity.CENTER);
// Add this
myText.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
return myText;
}
});
答案 2 :(得分:-1)
您是否尝试过使用ConstraintLayout?使用它可能会帮助你。如果您提供有关所有内容的行为需要的更多信息,我可以给您一个代码示例。