2

Linear Layout のすべての EditText フィールドを 1 行に設定したいのですが、どのようにすればよいでしょうか?

詳細なコード:

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        style="@style/LoginTextFieldTheme"
        >
        <EditText 
            android:id="@+id/textPassword"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:inputType="textPassword"
            android:hint="password"
            />
        <EditText 
            android:id="@+id/textPasswordConfirm"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:inputType="textPassword"
            android:hint="password confirm"
            />
    </LinearLayout>

EditText を 1 行にできるように、LoginTextFieldTheme で何かを指定したいと考えています。

オンラインで検索したところ、「スタイル」はViewGroupの子要素には適用されず、「テーマ」はアクティビティにのみ適用できます。

ViewGroup に適用されるスタイルに「buttonStyle」を適用するようなものがありますが、TextEdit をどうするかについての正確な/完全なドキュメントが見つかりません。

どうもありがとう。

4

2 に答える 2

3

これを達成するためのオプションはほとんどありません。

1.スタイル.xml

EditTextウィジェットにスタイルを適用できます。

  • フォルダーに次のスタイルを追加しstyle.xmlます。

    <style name="My.EditText.Style" parent="@android:style/Widget.EditText">
        <item name="android:singleLine">true</item>
    </style>
    
  • そしてEditText、レイアウトのそれぞれに次を追加します:style="@style/My.EditText.Style"
    のように:

    <EditText 
        android:id="@+id/textPassword"
        style="@style/My.EditText.Style"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:inputType="textPassword"
        android:hint="password"
    /> 
    

2.伸ばすEditText

独自のカスタム EditText を拡張して作成できます。次に、ウィジェットをsingleLinetrue になるように調整し、このカスタム ビューをレイアウトで使用できます。

3. 繰り返すViewGroup

next ViewIteratoroverLinearLayoutを使用して反復し、必要なプロパティを確認しinstanceofEditTextから変更できます。

public class ViewIterator implements java.util.Iterator<View>
{
    private java.util.Stack<View> mNodes;

    public ViewIterator(View view)
    {
        mNodes = new java.util.Stack<View>();
        if (view != null)
        {
            mNodes.push(view);
        }
    }

    public boolean hasNext()
    {
        return !mNodes.empty();
    }

    public View next()
    {
        View view = null;

        // if remaining nodes
        if (hasNext())
        {
            // return the last element
            view = mNodes.pop();
            assert (view != null);
            // if it is a container, add its children to the stack
            if (view instanceof ViewGroup || view instanceof AdapterView)
            {
                ViewGroup viewGroup = (ViewGroup)view;
                for (int i = 0; i < viewGroup.getChildCount(); i++)
                {
                    assert (viewGroup.getChildAt(i) != null);
                    mNodes.push(viewGroup.getChildAt(i));
                }
            }
        }

        // return result
        return view;
    }

    public void remove()
    {
        // not supported
    }
}
于 2013-09-11T17:27:50.197 に答える