0

我有一个垂直的,里面LinearLayout有 2 个TextSwitcher。有时只有第一个(@+id/ts1)会显示,有时它们都会显示在屏幕上。for 的字体大小为ts120,forts2为 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 时,文本没有垂直居中,更像是垂直顶部而不是居中。我以编程方式设置了这些 2 的可见性TextSwitchers

有谁知道为什么会这样?

谢谢!!!

4

3 回答 3

4

设置layout_gravityonTextSwitchers不会更改android:gravity底层TextViews 的文本。您可以通过将它们放在 XML 中来覆盖默认使用的TextViews 。TextSwitcher从那里,您可以在它们上设置android:layout_gravityorandroid: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>
于 2016-11-30T00:08:39.203 回答
2

您需要将重力选项添加到 TextView,而不是 TextSwitcher。例如,您可以动态添加 layout_width、layout_height 和重力选项。

    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;
        }
    });
于 2016-11-30T00:21:26.770 回答
-1

您是否尝试过使用 ConstraintLayout?使用它可能会帮助你。如果您提供有关一切行为需要的更多信息,我可以给您一个代码示例。

于 2016-11-29T23:46:40.733 回答