2011-10-04 55 views
0

我的用户界面包含两个元素:顶部的按钮和按钮下的文本视图。按钮的宽度设置为“wrap_content”,所以当我在运行时将不同的文本设置为按钮时,它的宽度将会改变。我希望始终让textview与按钮对齐(具有相同的宽度),特别是首次加载UI。如何使文本视图与上面的小部件对齐?

我试图让该按钮的宽度onGlobalLayout事件,并设置TextView的宽度,但似乎不起作用。谁能帮我?

UPDATE:

我想我可能有超过简化我的问题。真正的用户界面有很多小部件(我的问题中的按钮和textview)由代码生成。所以我不能用XML来定义它们。并且由于UI未完全加载,所以我无法使用getWidth()获取对齐文本视图时按钮的实际宽度。

回答

1

在XML中使用此布局,使用RelativeLayout作为Button和TextView的容器。

那么对于TextView的你会指定对齐:

android:layout_alignLeft="@+id/button1" 
android:layout_alignRight="@+id/button1" 

因此它的左侧和右侧都对准你的按钮。

注意:您可以使用RelativeLayout.LayoutParams从java代码也做同样的事情,但它比使用XML更复杂。

0

在情况下,你不喜欢代码的工作,这是关于按键与具有相同的宽度TextView的一个样本:

public class MainActivity extends Activity { 
    Button mButton; 
    TextView mText; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);   

     mButton = (Button)findViewById(R.id.button); 
     mText = (TextView)findViewById(R.id.text); 

     updateUI(); 
    } 

    public void updateUI() { 
     int wButton = mButton.getWidth(); 
     int wText = mText.getWidth(); 

     if(wButton < wText) { 
      mButton.setWidth(wText); 
     } else { 
      mText.setWidth(wButton); 
     } 
    } 
} 

好,其缺点是需要调用updateUI()每次你更新文本任一控制。

+0

感谢您的代码@xjaphx。但是我真正的UI有很多由代码生成的小部件。我无法使用自己的方式来获取小部件的宽度,因为当我尝试对齐这些小部件时UI并未完全加载。 – eric2323223