TextSwitcher没有与layout_gravity垂直居中:center_vertical

时间:2016-11-29 23:38:53

标签: android android-layout android-linearlayout android-styles textswitcher

我有一个垂直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的可见性。

有谁知道为什么会这样?

感谢!!!

3 个答案:

答案 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?使用它可能会帮助你。如果您提供有关所有内容的行为需要的更多信息,我可以给您一个代码示例。