【问题标题】:TextSwitcher not centered vertically with layout_gravity: center_verticalTextSwitcher 未使用 layout_gravity 垂直居中:center_vertical
【发布时间】:2016-11-29 23:38:53
【问题描述】:

我有一个垂直的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 时,文本没有垂直居中,更像是垂直顶部而不是居中。我以编程方式设置这 2 个 TextSwitchers 的可见性。

有人知道为什么会这样吗?

谢谢!!!

【问题讨论】:

  • 只是从您的布局中猜测... TextSwitcher 高度与父级匹配,那么它应该如何居中?
  • 你的目标是什么?你只想要一段可以来回切换的文本吗?如果是这样的话,你只需要 1 个 TextSwitcher,而不是 2 个。每个 TextSwitcher 包含 2 个 TextView 和在它们之间切换的方法。
  • @JamesMcCracken 我需要 2 个 TextSwitcher,因为它们每个人都需要在不同情况下切换一些文本。我的目标是做一些文本切换,在某些情况下,我只需要一个。我不能只做一些字符串操作并将它们组合成一个,因为每个 TextSwitcher 只是不同的文本字体、大小等。

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


【解决方案1】:

TextSwitchers 上设置layout_gravity 不会更改底层TextViews 的文本android:gravity。您可以通过将TextSwitchers 使用的默认TextViews 放入您的XML 中来覆盖它们。从那里,您可以在它们上设置android:layout_gravityandroid: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>

【讨论】:

  • 由于我使用 setFactory 为 TextSwitcher 创建 textview,因此我也将 setGravity 添加到新创建的 TextView 中,但它仍然没有显示在中心。我需要像上面一样在 xml 文件中定义 TextView 吗?
  • 对我来说,XML 让我更容易理解事物,但 setFactory 应该可以正常工作。我的下一个建议是调试带有布局边界的 UI(通过设备上的开发人员设置)并查看发生了什么。您也可以使用 Android Studio 中的层次结构查看器进行调试。
【解决方案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;
        }
    });

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-15
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 2014-09-16
      • 2013-10-15
      • 2011-06-21
      相关资源
      最近更新 更多