Android-将TextView的宽度设置为按钮-1或按钮-2的左侧

时间:2014-08-04 06:40:15

标签: android android-layout textview

背景
我在TextView右侧有TextView和两个(自定义)按钮。 2个按钮和TextView包含在单个RelativeLayout中。现在,在任何时间点,按钮-1或按钮-2都将可见。由于我不知道哪个按钮可见,因此在我的两个按钮的代码中,我添加了

android:layout_toRightOf="@+id/MyTextView" 
XML文件中的

属性。哪个工作正常。这会根据TextView的位置(和宽度)放置按钮。

问题:
语言更改后,我必须根据Button右侧的宽度更改TextView的宽度。我同时尝试了minWidth/maxWidth按钮和TextView,但他们仍然不允许根据按钮的宽度动态调整TextView的大小。

无论如何我可以指定:

android:layout_toLeftOf="@+id/button1 | @+id/button2"

,即按钮-1或按钮-2左侧的TextView。那么文本视图将根据右边的按钮对齐?

注意:
我更喜欢需要更改XML布局文件(静态)而不是在java(活动)文件中添加代码的解决方案。

5 个答案:

答案 0 :(得分:8)

您可以将这两个按钮保留在RelativeLayout中,并将RelativeLayout放在另一个RelativeLayout中,然后将TextView设为alignLeft RelativeLayout }}:

我的应用中的示例代码:您需要根据自己的

进行修改
<RelativeLayout
    android:id="@+id/header_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">        

    <RelativeLayout
        android:id="@+id/image_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" >

        <ImageView
            android:id="@+id/settings_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginRight="2dip"
            android:contentDescription="@string/setting_desc"
            android:src="@drawable/top_settings"
            android:visibility="gone" />
        <ImageView
            android:id="@+id/logout_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@id/settings_img"
            android:contentDescription="@string/logout_desc"
            android:src="@drawable/top_quit"
            android:visibility="gone" />
    </RelativeLayout>

    <ImageView
        android:id="@+id/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/image_container"
        android:layout_centerVertical="true"
        android:contentDescription="@string/logo_desc"
        android:src="@drawable/top_logo" />
</RelativeLayout>

因此,当ImageView中的任何{{1}}可见时,您的观看次数就会很好。

答案 1 :(得分:6)

  

问题:语言更改后,我必须根据Button右侧的宽度更改TextView的宽度。我也尝试了按钮和TextView的minWidth / maxWidth,但它们仍然不允许根据按钮的宽度动态调整TextView的大小。

好。

我们走了:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        android:maxLines="1"
        android:ellipsize="end"
        android:layout_toLeftOf="@+id/fl" />

    <FrameLayout
        android:id="@id/fl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" >

        <Button
            android:id="@+id/bb1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="HELLO 1" />

        <Button
            android:id="@+id/bb2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="HELLO 2" />

    </FrameLayout>

</RelativeLayout>

发生了什么事?

我们已将Buttons归为FrameLayout。因此,您的问题Is there anyway where I can specify : android:layout_toLeftOf="@+id/button1 | @+id/button2"已得到解决 - 现在,我们只需告诉TextView左侧FrameLayout

接下来,我们将TextView's宽度设置为match_parent 是必要的。如果TextView's宽度设置为wrap_content,则TextView似乎是右对齐的。

另外,我们需要Buttons坚持正确的边缘(从我的问题中收集到的)。因此,我们在layout_alignParentRight="true"上设置了FrameLayout属性。

maxLinesellipsize属性可确保文字保持可用。

如果我以某种方式误解了这个问题,请在下面的评论中解释。

这就是它。

答案 2 :(得分:1)

我建议在TextView上使用LinearLayout layout_weight属性。我已经提供了一个如何实现它的基本示例。

MainActivity.java

package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    public static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Button btnOne = (Button) findViewById(R.id.btnOne);
        final Button btnTwo = (Button) findViewById(R.id.btnTwo);

        final Button btnHideOne = (Button) findViewById(R.id.btnHideOne);
        final Button btnHideTwo = (Button) findViewById(R.id.btnHideTwo);
        final Button btnShowAll = (Button) findViewById(R.id.btnShowAll);

        btnHideOne.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                btnOne.setVisibility(View.GONE);
            }
        });

        btnHideTwo.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                btnTwo.setVisibility(View.GONE);
            }
        });

        btnShowAll.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                btnOne.setVisibility(View.VISIBLE);
                btnTwo.setVisibility(View.VISIBLE);
            }
        });
    }
}

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context="${packageName}.${activityClass}" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#979797"
            android:text="Text Text Text" />

        <Button
            android:id="@+id/btnOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Normal" />

        <Button
            android:id="@+id/btnTwo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Long Text" />
    </LinearLayout>

    <Button
        android:id="@+id/btnHideOne"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="Hide Button 1" />

    <Button
        android:id="@+id/btnHideTwo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hide Button 2" />

    <Button
        android:id="@+id/btnShowAll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show All" />

</LinearLayout>

答案 3 :(得分:0)

如果您可以修改代码,则可以通过编程方式更新TextView相对于哪个按钮。

RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams();
lp.addRule(RelativeLayout.LEFT_OF, _BUTTON_ID_);

答案 4 :(得分:0)

我做了以下操作来解决问题:

  1. 在XML文件中创建了一个RelativeLayout,并在其中添加了按钮(button-1和button-2)。 RelativeLayout具有以下属性:

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" 
        and Id
    
  2. android:layout_toLeftOf="@+id/relativelayoutID"添加到TextView