【问题标题】:Why doesn't edittext change dp when the user starts typing in it?当用户开始输入时,为什么edittext不改变dp?
【发布时间】:2016-02-29 09:26:24
【问题描述】:

我原以为这很简单,但我尝试了几件事,但它不起作用。基本上,当活动开始时,我希望我的编辑文本不可见(我通过将大小设置为 0dp、宽度和高度来做到这一点)。

然后,想法是当用户在软键盘上键入时,大小会发生变化,并且用户可以看到editText以及正在键入的内容。

这是我的代码:

MainActivity.java

package com.example.chris.sunil_gupta;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.provider.CallLog;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ListView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

//create a ListView object called listview
        ListView listview;

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listview = (ListView) findViewById(R.id.ListView_2);

        final EditText editText = (EditText) findViewById(R.id.editText);
        editText.requestFocus();

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {


                if (editText.length() > 0) {

                    //Your query to fetch Data
//            editText.getLayoutParams().width=32;
//            editText.getLayoutParams().height=50;
                    editText.setWidth(32);
                    editText.setHeight(50);
                }
            }
        });

    }

}

布局.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    tools:context=".MainActivity">

    <ListView android:id="@+id/ListView_2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:background="@color/black"
        android:layout_weight="1">
    </ListView>

    <EditText
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:id="@+id/editText"
        android:background="@null"
        android:inputType="phone">
    <!--android:visibility="invisible"-->
    </EditText>


</LinearLayout>

【问题讨论】:

    标签: android addtextchangedlistener


    【解决方案1】:

    对不起,改成这样:

    float density=getResource().getDisplayMetrics().density;
    editText.getLayoutParams().width =(int)(32*density);
    editText.getLayoutParams().height =(int)(50*density);
    editText.requestLayout();
    

    【讨论】:

    • 我认为您的意思是 getResources()?我的 editText.getLayoutParams().width =(int) 32*density; editText.getLayoutParams().height =(int) 50*density;出现红色下划线,当我悬停时消息为红色:不兼容的类型。必需:int,找到:float 知道如何解决这个问题吗?
    【解决方案2】:
    try it
     if (s.length() > 0) {
    
                        //Your query to fetch Data
    //            editText.getLayoutParams().width=32;
    //            editText.getLayoutParams().height=50;
                        editText.setWidth(32);
                        editText.setHeight(50);
                    }
                }
    instead of
     if (editText.length() > 0) {
    
                        //Your query to fetch Data
    //            editText.getLayoutParams().width=32;
    //            editText.getLayoutParams().height=50;
                        editText.setWidth(32);
                        editText.setHeight(50);
                    }
                }
    

    【讨论】:

    • 感谢 Khizar,实际上现在不在我的机器前,但回来时会试一试。虽然...我很确定我已经尝试过了,但没有成功。
    • 如果它不起作用,那么试试这个 if(s.toString().length>0){ body }
    • 谢谢 Khizar。问题的根源是我错过了 editText.requestLayout();
    • 欢迎@ChristopheHarris
    【解决方案3】:

    尝试以下方法:

    editText.getLayoutParams().width = 32;
    editText.getLayoutParams().height = 50;
    editText.requestLayout();
    

    但是,这些值以像素为单位。因此,您可能需要在设置值之前执行一些从 dp 到 px 的转换。

    【讨论】:

    • 感谢乌古尔坎。我给了 wngxao 正确的答案,因为他给了我一个计算出转换的答案。虽然 +1。
    【解决方案4】:

    试试这个。设置 minWidth 和 setHeight 并将宽度和高度设置为 wrap_content

      <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="0dp"
        android:minWidth="0dp"
        android:id="@+id/editText"
        android:background="@null"
        android:inputType="phone">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      相关资源
      最近更新 更多