当用户开始输入dp时,为什么不编辑文字更改dp?

时间:2016-02-29 09:26:24

标签: android addtextchangedlistener

我原本以为这很简单,但我已经尝试过几件事,但它并没有起作用。基本上,当活动开始时,我希望我的编辑文本不可见(我通过将大小设置为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);
                }
            }
        });

    }

}

Layout.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>

4 个答案:

答案 0 :(得分:1)

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);
                }
            }

答案 1 :(得分:1)

尝试以下方法:

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

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

答案 2 :(得分:1)

抱歉,请更改为:

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

答案 3 :(得分:0)

试试这个。设置minWidth和setHeight,并将width和height设置为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">