在Android上使按钮宽度等于不同的文本宽度(不是按钮的文本)

时间:2014-08-28 01:45:03

标签: android

现在我的登录按钮比我的应用程序名称文本宽,因为它使用相对布局的固定填充,但我希望它自动加宽以与应用程序名称文本的左右边缘对齐。有没有办法以编程方式执行此操作?

我希望它在所有设备上看起来都一样。我担心如果我只是硬编码自己的边距,它会在我的设备上看起来正确,但如果他们以不同的方式渲染字体,可能在其他设备上看起来不正确。

谢谢!

layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
android:background="@drawable/back_image"
android:padding="20dp" >

    <TextView
    android:id="@+id/AppNameTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="@dimen/margin_top"
    android:fontFamily="Arial"
    android:text="@string/app_title"
    android:textColor="@color/white"
    android:textSize="@dimen/text_size" />

    <com.timey.widget.Button
    android:id="@+id/signInButton"
    android:layout_width="match_parent"
    android:layout_height="65dp"
    android:background="@color/green"
    android:fontFamily="Arial"
    android:text="@string/sign_in"
    android:textColor="@color/white"
    android:textSize="30sp" />

</RelativeLayout>

带有红色虚线的样机,说明我希望应用名称的两侧与我的登录按钮的两侧对齐:

enter image description here

2 个答案:

答案 0 :(得分:0)

我不完全确定这是否会有所帮助,但让我试一试。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="App\nTitle" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/title"
        android:layout_alignRight="@id/title"
        android:layout_below="@id/title"
        android:text="Log In" />

</RelativeLayout>

但是,按钮的宽度与文本视图一样宽,可能不足以显示自己的文本。

答案 1 :(得分:0)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2" />

</LinearLayout>

第一个按钮将占用所需的空间。然后,下一个按钮(或者你的情况)会占用与它的父线(线性布局)一样多的空间,而另一边将包裹内容,即第一个按钮的宽度。因此两个按钮的宽度都相同。您可以将其用于任何其他组件。

<强> UPDATE1

Key to the success
1. A container with wrap_content
2. First component should have wrap_content
3. Second component should have match_content

<强> UPDATE2 对于RelativeLayout使用layout_alignLeft =&#34; @ + id / button1&#34;和layout_alignRight =&#34; @ + id / button1&#34; 它将对齐第一个组件的左侧和右侧,即button1。