0

私は電卓アプリに取り組んでおり、次のことを望んでいます。

  1. 複数行のボタン。
  2. ボタンは画面サイズ全体を埋め、下に空白を残さないようにする必要があります。

これは、ネストされた線形レイアウトを使用して正常に実現されました。ただし、android lintは、線形レイアウトの「ネストされた重み」の非効率性を指摘しています。それを解決する方法を提案するか、相対レイアウトを使用して同じことを実現してください。

以下は、線形レイアウトのサンプルです。

<LinearLayout 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:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.5"
    android:orientation="horizontal">

    <Button
        android:id="@+id/button_7"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="match_parent"
        android:onClick="clickDigit"
        android:text="@string/button_7" />

    <Button
        android:id="@+id/button_8"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="match_parent"
        android:onClick="clickDigit"
        android:text="@string/button_8" />

</LinearLayout>

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.5"
    android:orientation="horizontal">

     <Button
        android:id="@+id/button_dot"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="match_parent"
        android:onClick="clickDot"
        android:text="@string/button_dot" />

    <Button
        android:id="@+id/button_0"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="match_parent"
        android:onClick="clickDigit"
        android:text="@string/button_0" />

</LinearLayout>

これは、ネストされた線形レイアウトを使用して作成されたスクリーンショットです。相対レイアウトを使用して同じことを実現したいと思います。

スクリーンショット

4

1 に答える 1

2

それを解決する方法を提案するか、相対レイアウトを使用して同じことを実現してください。

の中央にアンカー ビューを使用し、そのアンカー ビューの両側にRelativeLayout2 つButtonsの重み付けされたビューを配置します。LinearLayoutこのようなもの:

<RelativeLayout>
    <View android:id="@+id/anchor" android:layout_centerHorizontal="true" />
    <!-- the C button part -->
    <Linearlayout android:id="@+id/firstRow" android:layout_alignParentRight="true" android:layout_toRightOf="@id/anchor">
          <View android:layout_weight="1" />
          <Button android:text="C" android:layout_weight="1" />  
    </LinearLayout>  

    <Linearlayout android:id="@+id/firstRowPart2" android:layout_alignParentRight="true" android:layout_toRightOf="@id/anchor" android:below="@id/firstRow">
         <Button android:text="3" android:layout_weight="1" />  
          <Button android:text="+" android:layout_weight="1" />  
    </LinearLayout>  


    <Linearlayout android:id="@+id/firstRowPart1" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/anchor" android:below="@id/firstRow">
         <Button android:text="1" android:layout_weight="1" />  
          <Button android:text="2" android:layout_weight="1" />  
    </LinearLayout>  

    <!-- rest of the rows -->
</RelativeLayout>

ご覧のとおり、これにはレイアウトの深さを 1 つ増やし、さらにビューをレイアウトに追加する必要があるため、最終的にパフォーマンスの向上はそれほど大きくありません。

そのレイアウトを行うためのより良い方法は、セットを使用してすべての列を引き伸ばすことです (この場合、より正確には 5 をTableLayout追加するだけで済みます)。TableRows

そのレイアウトを行うためのさらに良い方法は、独自のカスタム レイアウトを作成することです。これにより、Buttonsレイアウトを 1 つだけ (重みなしで) 使用して (そして非常に簡単に作成できるはずです)、グリッドにそれらを配置できます。

ただし、android lint は、線形レイアウトの「ネストされた重み」の非効率性を指摘しています。

これを考慮に入れるのは良いことですが(そうするべきです)、あなたの場合、アプリはおそらく小型/軽量であるため、ネストされた重みがアプリのパフォーマンスに大きな影響を与えることはありません。単なる意見です。これだけのために反対票を投じないでください。

于 2013-02-23T10:31:49.313 に答える