【问题标题】:LayoutParams of EditText inside ListView does not work correctly, cannot type any characters in edittextListView 内EditText 的LayoutParams 无法正常工作,无法在edittext 中键入任何字符
【发布时间】:2017-04-15 13:26:07
【问题描述】:

我有一个 list.xml

<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.phongponix.trackingbodybuilding.MainActivity$PlaceholderFragment"
    android:orientation="vertical"
    >

    <ListView android:id="@+id/lvExerciseList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"
        android:paddingBottom="50dp"
       ></ListView>
</LinearLayout>

我的 list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="20dp"
    android:id="@+id/containerTest">


    <LinearLayout
        android:id="@+id/first_panel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imgExcercisePhoto"
            android:layout_width="100dp"
            android:layout_height="100dp" />

        <TextView
            android:id="@+id/tvExerciseName"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="aaa" />
    </LinearLayout>
    <RelativeLayout android:id="@+id/rlRecordContainer"
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:orientation="horizontal">

    </RelativeLayout>


    <android.support.v7.widget.RecyclerView
        android:id="@+id/rvExcerciseRecords"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toRightOf="@id/first_panel"
        android:clipToPadding="false"
        android:scrollbars="horizontal"></android.support.v7.widget.RecyclerView>

</LinearLayout>

我将适配器用于我的列表,如下所示:

if (convertView == null) {
            view = inflater.inflate(R.layout.list_item, null);
            viewHolder = new ViewHolder();
            viewHolder.title = (TextView) view.findViewById(R.id.tvExerciseName);
            view.setTag(viewHolder);
            LinearLayout container = (LinearLayout)view.findViewById(R.id.first_panel);

            LinearLayout.LayoutParams layoutParamsWeight = new LinearLayout.LayoutParams(convertDpToPixel(activity, 30), convertDpToPixel(activity, 20));
            layoutParamsWeight.setMargins(0, 0, convertDpToPixel(activity, 5), convertDpToPixel(activity, 5));
            EditText etWeight = new EditText(activity);
            etWeight.setWidth(convertDpToPixel(activity, 30));
            etWeight.setHeight(convertDpToPixel(activity, 20));
            //etWeight.setLayoutParams(layoutParamsWeight);
            etWeight.setBackgroundColor(ContextCompat.getColor(activity, R.color.colorEditTextBox));
            etWeight.setInputType(InputType.TYPE_CLASS_NUMBER);
            etWeight.setFocusableInTouchMode(true);
            //etWeight.setId(currentWeightID);
            container.addView(etWeight);

            RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.rlRecordContainer);
            renderRecordItemHead(activity, relativeLayout);
            renderRecordItem(activity, relativeLayout, currentWeightID);

            recyclerView = (RecyclerView) view.findViewById(R.id.rvExcerciseRecords);
            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false);
            linearLayoutManager.setStackFromEnd(true);
            recyclerView.setLayoutManager(linearLayoutManager);
            recyclerView.setAdapter(trackingPlanHorizontalAdapter);


        }

如下图所示,如果我注释掉(不使用)LayoutParams,我可以输入并查看我的 EditText 中的字符。如果我为 EditText 使用 LayoutParams,我无法输入。当我点击 EditText 时,键盘出现,然后它失去焦点,所以每当我触摸键盘时,它什么都不显示。

【问题讨论】:

  • 不要认真对待我的话你的问题在某种程度上没有意义,如果你不应用 layoutParams ViewGroup 应用默认参数 Wrap_CONTENT 如果你(phongtran ) 应用 layoutparam 你给它确定的尺寸new LinearLayout.LayoutParams(convertDpToPixel(activity, 30) 这就是为什么他们会那样做,我对吗?
  • 当您单击应用了 layoutparams 的 edittext 时,键盘是否可见??

标签: android listview android-edittext layoutparams


【解决方案1】:

几天前我也遇到了同样的问题。但显然它实际上正在被编辑,但由于 EditText 的默认填充和文本大小,它不适合我提供的 layoutparams 并且它正在裁剪额外的部分,所以它对我来说是不可见的。尝试将 textsize 设置为小并填充 0。它会起作用

【讨论】:

    【解决方案2】:

    为什么不在 XML 中使用 edittext 视图?

    <EditText
    android:id = @+id/"edit_ text"
    android:text = "Edit text here"
    android:layout_width = 100dp
    android:layout_height = 100dp
    

    【讨论】:

    • 我想在代码中动态生成视图。是的,我现在正在考虑改变渲染布局的方式。
    • 是的,为什么动态生成编辑文本而不是其他布局字段?
    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多