layout_weight
パラメータを使用してボタンの幅をレイアウト全体の幅の70%に設定しましたが、機能させるために重要な詳細が欠けているようです。
(別の解決策は、プログラムでdisplay.getWidth()
を使用することですが、button.setWidth()
で幅を設定することを選択した場合、.xmlがどのように見えるかわからないため、それも機能しません。 ])
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_height="fill_parent"
Android:layout_width="fill_parent"
Android:layout_weight="1.0">
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="15px"
Android:id="@+id/userVersionTextViewNew"
Android:gravity="center"
Android:layout_centerVertical="true"/>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="15px"
Android:gravity="center"
Android:layout_above="@id/userVersionTextViewNew"
Android:id="@+id/userSoftSerialNumberTextView"/>
<ImageView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:src="@drawable/logo_200"
Android:layout_above="@id/userSoftSerialNumberTextView"
Android:layout_centerHorizontal="true"/>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="15px"
Android:gravity="center"
Android:layout_below="@id/userVersionTextViewNew"
Android:id="@+id/dummyTextView"/>
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:id="@+id/loginButton"
Android:text="Σύνδεση"
Android:layout_centerHorizontal="true"
Android:layout_below="@id/dummyTextView"
Android:layout_weight="0.7"/>
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:id="@+id/demoLoginButton"
Android:text="Δοκιμαστική χρήση"
Android:layout_centerHorizontal="true"
Android:layout_below="@id/loginButton"
Android:layout_weight="0.7"/>
</RelativeLayout>
これを試して..
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_height="fill_parent"
Android:layout_width="fill_parent">
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="15px"
Android:id="@+id/userVersionTextViewNew"
Android:gravity="center"
Android:layout_centerVertical="true"/>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="15px"
Android:gravity="center"
Android:layout_above="@id/userVersionTextViewNew"
Android:id="@+id/userSoftSerialNumberTextView"/>
<ImageView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:src="@drawable/logo_200"
Android:layout_above="@id/userSoftSerialNumberTextView"
Android:layout_centerHorizontal="true"/>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="15px"
Android:gravity="center"
Android:layout_below="@id/userVersionTextViewNew"
Android:id="@+id/dummyTextView"/>
<LinearLayout
Android:layout_height="wrap_content"
Android:layout_width="fill_parent"
Android:gravity = "center_horizontal"
Android:layout_below="@id/dummyTextView"
Android:id="@+id/loginButtonLayout"
Android:weightSum="1.0">
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/loginButton"
Android:text="Σύνδεση"
Android:layout_weight="0.7"/>
</LinearLayout>
<LinearLayout
Android:layout_height="wrap_content"
Android:layout_width="fill_parent"
Android:gravity = "center_horizontal"
Android:layout_below="@id/loginButtonLayout"
Android:weightSum="1.0">
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/demoLoginButton"
Android:text="Δοκιμαστική χρήση"
Android:layout_weight="0.7"/>
</LinearLayout>
</RelativeLayout>
問題
RelativeLayoutでlayout_weightパラメーターを使用することはできません。これらは、LinearLayoutからのパラメーターです。違いについては、後で詳しく説明します。しかし、最初にこの質問の解決策について
解決策
LinearLayoutを使用して、重みの分布で要素を一列に配置できます。 ただし、layout_weightsを追加するときに0dpの幅を使用することを忘れないでください!次の例は、70/30のウェイト分布を示しています。
<LinearLayout
Android:id="@+id/wrapper"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:weightSum="1.0" >
<Button
Android:text="left"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight=".70" />
<Button
Android:text="right"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight=".30" />
</LinearLayout>
これらすべては、すでにコードに含まれているRelativeLayout内にあります。この回答の残りは、これらの質問を持つすべての人が何をしているかを理解するために読むべき背景情報です。
RelativeLayout
複数の要素を含むレイアウトから始める場合は常に、線形のものを優先してRelativeLayoutを使用することをお勧めします。 RelativeLayoutは非常に強力であり、要素を互いに相対的に配置できます(leftOf、below、...)。ほとんどの場合、それはあなたが必要とする以上のものです。
the Android開発ドキュメント の例(すべてあると思います):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingLeft="16dp"
Android:paddingRight="16dp" >
<EditText
Android:id="@+id/name"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:hint="@string/reminder" />
<Spinner
Android:id="@+id/dates"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_below="@id/name"
Android:layout_alignParentLeft="true"
Android:layout_toLeftOf="@+id/times" />
<Spinner
Android:id="@id/times"
Android:layout_width="96dp"
Android:layout_height="wrap_content"
Android:layout_below="@id/name"
Android:layout_alignParentRight="true" />
<Button
Android:layout_width="96dp"
Android:layout_height="wrap_content"
Android:layout_below="@id/times"
Android:layout_alignParentRight="true"
Android:text="@string/done" />
</RelativeLayout>
LinearLayout
LinearLayoutも非常に機能しているように見えるかもしれませんが、Linearのみですべてを並べ替えるには、これらのレイアウトをネストし始める可能性があります。そして、それはそれが醜いパフォーマンスを得るところです。
再び the Android開発ドキュメント の例。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingLeft="16dp"
Android:paddingRight="16dp"
Android:orientation="vertical" >
<EditText
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:hint="@string/to" />
<EditText
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:hint="@string/subject" />
<EditText
Android:layout_width="fill_parent"
Android:layout_height="0dp"
Android:layout_weight="1"
Android:gravity="top"
Android:hint="@string/message" />
<Button
Android:layout_width="100dp"
Android:layout_height="wrap_content"
Android:layout_gravity="right"
Android:text="@string/send" />
</LinearLayout>
layout_weight
はRelativeLayout
内では機能しないと思います。 LinearLayout
内にRelativeLayout
を追加し、内部でlayout_weight
を使用する必要があるかもしれません。
また、layout_weight
を使用する場合、通常、オブジェクトの幅または高さを0dp
として定義する必要があるため、この場合は次のようになります。
Android:layout_weight="0.7"
Android:layout_height="0dp"
私はこの質問が古いことを知っていますが、解決策を探している人のためだけです:
Googleは Android.support.percent という新しいAPIを導入しました
PercentRelativeLayout
まさにあなたのケース:
<Android.support.percent.PercentRelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_height="fill_parent"
Android:layout_width="fill_parent">
<!-- Other controls -->
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:id="@+id/loginButton"
Android:text="Σύνδεση"
Android:layout_centerHorizontal="true"
Android:layout_below="@id/dummyTextView"
app:layout_widthPercent="70%"/>
<!-- Other controls -->
</Android.support.percent.PercentRelativeLayout>
layout_weight。LinearLayoutを親として機能します。だから私は問題がそこにあると思います。必要なものを実現するには、すべての線形レイアウトと相対レイアウトを組み合わせて使用する必要があります。
Android:layout_weight="1.0"
in Relative layoutタグ、ボタンの長さを設定したくない場合は"wrap_content"
@hcplが彼の答えで正しく述べたように:
RelativeLayoutでlayout_weightパラメーターを使用することはできません。これらは、LinearLayoutからのパラメーターです。
うん、彼は正しいです!しかし、ネストされたレイアウトによって引き起こされる パフォーマンスへの悪影響 について考えてください。
ConstraintLayoutの導入により、ネストされたLinearLayoutなしで問題を解決できます。 15%と85%のマージンを持つ2つの垂直ガイドラインを貼り付け、それらの間にボタンを配置します。
レイアウトのソースコードは次のとおりです。
<Android.support.constraint.ConstraintLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_height="match_parent"
Android:layout_width="match_parent">
<TextView
Android:id="@+id/userVersionTextViewNew"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textSize="15sp"
Android:text="userVersionTextViewNew"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toTopOf="@+id/userSoftSerialNumberTextView"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
Android:id="@+id/userSoftSerialNumberTextView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textSize="15sp"
Android:text="userSoftSerialNumberTextView"
app:layout_constraintTop_toBottomOf="@+id/userVersionTextViewNew"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toTopOf="@+id/imageView" />
<ImageView
Android:id="@+id/imageView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/logo_200"
app:layout_constraintTop_toBottomOf="@+id/userSoftSerialNumberTextView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toTopOf="@+id/dummyTextView" />
<TextView
Android:id="@+id/dummyTextView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textSize="15sp"
Android:text="dummyTextView"
app:layout_constraintTop_toBottomOf="@+id/imageView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toTopOf="@+id/loginButton" />
<Button
Android:id="@+id/loginButton"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:text="Σύνδεση"
app:layout_constraintTop_toBottomOf="@+id/dummyTextView"
app:layout_constraintLeft_toLeftOf="@+id/leftGuideline"
app:layout_constraintRight_toLeftOf="@+id/rightGuideline"
app:layout_constraintBottom_toTopOf="@+id/demoLoginButton" />
<Button
Android:id="@+id/demoLoginButton"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:text="Δοκιμαστική χρήση"
app:layout_constraintTop_toBottomOf="@+id/loginButton"
app:layout_constraintLeft_toLeftOf="@+id/leftGuideline"
app:layout_constraintRight_toLeftOf="@+id/rightGuideline"
app:layout_constraintBottom_toBottomOf="parent" />
<Android.support.constraint.Guideline
Android:id="@+id/leftGuideline"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:layout_constraintGuide_percent="0.15" />
<Android.support.constraint.Guideline
Android:id="@+id/rightGuideline"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" />
</Android.support.constraint.ConstraintLayout>
その結果、次のビューが得られます。
詳細は ConstraintLayoutを使用したインターフェースの作成 を参照してください。