背景
我在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(活动)文件中添加代码的解决方案。
答案 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
属性。
maxLines
和ellipsize
属性可确保文字保持可用。
如果我以某种方式误解了这个问题,请在下面的评论中解释。
这就是它。
答案 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)
我做了以下操作来解决问题:
在XML文件中创建了一个RelativeLayout
,并在其中添加了按钮(button-1和button-2)。 RelativeLayout
具有以下属性:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
and Id
将android:layout_toLeftOf="@+id/relativelayoutID"
添加到TextView
。