使子视图与父滚动视图的宽度匹配

Mar*_*cny 5 layout android scrollview

我有一个包含许多EditText子项的水平滚动视图.我希望这些子节点中的每一个都与父卷轴视图的可见区域的宽度相同.这可能是XML吗?

rup*_*pps 8

你可以写一个小助手类:

我们正在创造一个非常小的类,它扩展EditText名为FullWidthEditText像这样:

package com.YOURPACKAGENAME;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.HorizontalScrollView;

public class FullWidthEditText extends EditText {
    public FullWidthEditText(Context context) { super(context);}    
    public FullWidthEditText(Context context, AttributeSet attrs) { super(context, attrs); }
    public FullWidthEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        View parentScrollView=((View)(getParent().getParent()));

        if (parentScrollView!=null) {
            // check the container of the container is an HorizontallScrollView
            if (parentScrollView instanceof HorizontalScrollView) {
                // Yes it is, so change width to HSV's width
                widthMeasureSpec=parentScrollView.getMeasuredWidth();
            }
        }
        setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您已经创建了这个类,您可以像在普通的EditText中一样在XML中使用它:

<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/horizontalScrollView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffff0000" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_marginRight="5dp"
        android:orientation="horizontal" >

        <com.YOURPACKAGENAME.FullWidthEditText
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:id="@+id/yourEditTextId">
        </com.YOURPACKAGENAME.FullWidthEditText>

        <com.YOURPACKAGENAME.FullWidthEditText
            android:layout_width="wrap_content"
            android:layout_height="match_parent" >
        </com.YOURPACKAGENAME.FullWidthEditText>
        .
        .
        .
    </LinearLayout>
</HorizontalScrollView>
Run Code Online (Sandbox Code Playgroud)

你也可以以编程方式创建它,添加处理程序,监听器,更改文本,findViewById ......等......就像普通的EditText一样.

 EditText editText=new EditText(context);
 FullWidthEditText fullWidthEditText=new FullWidthEditText(context);
Run Code Online (Sandbox Code Playgroud)
  • 请注意,此解决方案也适用于任何其他Widget.如果你需要ie.全宽按钮,只是改变extends EditTextextends Button,你得到了它.

  • 您可以轻松自定义尺寸,关键线是:widthMeasureSpec=parentScrollView.getMeasuredWidth();所以你可以ie.使全宽减去10或20px,制作半宽等.

希望能帮助到你 !