【问题标题】:how to progmatically relocate a TextView in a layout in onConfigurationChanged如何以编程方式在 onConfigurationChanged 的​​布局中重新定位 TextView
【发布时间】:2015-01-18 12:37:47
【问题描述】:

我有一个在我的 Activity 中使用的布局。我想在 onConfigurationChanged 中以编程方式将 TextView 重新定位到不同的位置。

以下布局适用于纵向模式。当 orientation 改变时,我希望将 ID 为 elapsedTimeTextView 移动到 ID 为 baseTime 的 TextView 旁边以用于 横向模式,然后在纵向模式下回到同一位置。这是否可以通过编程方式实现?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/primary_call_banner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:gravity="center"
    android:orientation="vertical"
    >

    <LinearLayout
        android:id="@+id/callerName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clipChildren="false"
        android:clipToPadding="false"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/baseTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:singleLine="true"
            />
    </LinearLayout>


    <LinearLayout
        android:id="@+id/labelContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clipChildren="false"
        android:clipToPadding="false"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/labelAndNumber"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
            />

            <TextView
                android:id="@+id/phNumber"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="6dp"
                android:singleLine="true"
/>

            <TextView
                android:id="@+id/elapsedTime"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:singleLine="true"
                />

        </LinearLayout>
    </LinearLayout>
</LinearLayout>  

【问题讨论】:

  • 您是否尝试过为纵向和横向使用不同的布局 xml?
  • 我不希望我的活动被完全杀死并重新启动。在横向模式下,我想隐藏 ID 为 labelContainer 的 LinearLayout 并将 ID 为 elapsedTime 的 TextView 移动到 ID 为 baseTime 的 TextView 旁边.
  • 在这种情况下,您可能需要在 onConfigurationChanged() 方法中设置视图的布局参数。
  • 我现在将其更改为RelativeLayout 并尝试获取layoutParams,如果您有关于如何以编程方式将TextView 从一个RelativeLayout 移动到另一个RelativeLayout 的示例代码,请给我一个示例代码?
  • 与其移除视图,不如将文本视图放在两个相对布局中并根据方向更改它们的可见性。

标签: android layout android-activity orientation


【解决方案1】:

使用 2 种不同的布局。一张用于您的肖像,一张用于您的风景。应用应该会自动切换

【讨论】:

  • 我不希望我的活动被完全杀死并重新启动。在横向模式下,我想隐藏 ID 为 labelContainer 的 LinearLayout 并将 ID 为 elapsedTime 的 TextView 移动到 ID 为 baseTime 的 TextView 旁边
  • 您可以尝试使用相对布局来完成所有操作,然后重新排列所有内容。相对布局更强大,更容易作为线性布局处理。
  • 我现在将其更改为RelativeLayout 并尝试获取layoutParams,如果您有关于如何以编程方式将TextView 从一个RelativeLayout 移动到另一个RelativeLayout 的示例代码,请给我一个示例代码?
  • 我没有示例代码,但我建议您使用 layout_below / top / left / right xml 属性并将 textvjews 保持在相同的父布局中
猜你喜欢
  • 1970-01-01
  • 2011-03-14
  • 2017-09-21
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
相关资源
最近更新 更多