Android: рабочий образ в edittext

Я хочу иметь изображение внутри текста редактирования, которое изменит его возможность рисования с анимацией, пока пользователь вводит, следующим образом:

введите здесь описание изображения

введите здесь описание изображения

Спасибо :)


person Daniel Mendel    schedule 26.12.2012    source источник
comment
возможно дублирование заголовка stackoverflow.com/questions/3705809/   -  person mjosh    schedule 26.12.2012


Ответы (3)


вам просто нужно установить CompoundDrawables {Right | Слева | Топ | Свойство Bottom} в xml

<EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/searchedTxt"
        android:width="200dp"
        android:layout_alignParentRight="true"
        android:drawableLeftt="@android:drawable/ic_menu_search"/> 
person K_Anas    schedule 26.12.2012
comment
Да, это я понял сам, но я хочу, чтобы это также менялось, когда пользователь вводит текст внутри текста редактирования... - person Daniel Mendel; 26.12.2012

пожалуйста, используйте фрагмент кода xml, приведенный ниже, как часть вашего основного xml-файла (отвечающего за пользовательский интерфейс):

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget665"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="left"
    android:paddingLeft="1dip"
    android:paddingRight="2dip">
        <ImageView
            android:id="@+id/searchImageView"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:src="@android:drawable/ic_search_category_default"
            android:layout_gravity="center_vertical"
            android:paddingTop="2dip"
            android:paddingBottom="2dip">
        </ImageView>
            <EditText
            android:id="@+id/search_edit_text"
            android:layout_width="fill_parent"
            android:layout_height="35dip"
            android:text=""
            android:textSize="18sp"
            android:background="#f5f5dc"
            android:layout_gravity="center_vertical">
        </EditText>
</LinearLayout>

поместите этот внутренний класс в свою основную деятельность

public class SearchTextWatcher implements TextWatcher{

    @Override
    public void afterTextChanged(Editable arg0) {

    }

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
            int arg3) {

    }

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



                if(!prefix.equals("")){
                    changeImageToProcessing();
                }else{
                    changeImageToIdle();
                }




    }

}

извлеките searchBar (EditText) и iv (ImageView) из вашего contentView во время onCreate(), что-то вроде

searchBar = (EditText)contentView.findViewById(R.id.customer_search_edit_text);
iv = (ImageView)contentView.findViewById(R.id.searchImageView);

прикрепить текст changelistenber к строке поиска edittext

    searchBar.addTextChangedListener(searchTextWatcher);

добавьте пару вспомогательных методов, которые будут отвечать за изменение изображения соответственно

    public void changeImageToProcessing(){

        iv.setImageResource(resId);// resid is the id of the working image
    }

public void changeImageToIdle(){


    iv.setImageResource(resId);// resid is the id of the idle image
}

//эти методы вызываются из onTextChange() внутри класса SearchTextWatcher

person stack_ved    schedule 26.12.2012

Поместите EditText и ImageView в RelativeLayout, и когда вы меняете текст, меняйте изображение

EDIT: добавлен пример кода

1) основной.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
    <EditText
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:text="New EditText"
            android:id="@+id/editText"/>
    <ImageView
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:id="@+id/imageView"
            android:background="@drawable/first_image"
            />
</RelativeLayout>

2) класс MyActivity

public class MyActivity extends Activity {

    private EditText editText;
    private ImageView image;
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        initializeFormViews();
        initializeFormEvents();
    }

    public void initializeFormViews(){
        editText = (EditText) findViewById(R.id.editText);
        image = (ImageView) findViewById(R.id.imageView);
    }

    public void initializeFormEvents(){

        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) {
                // changes image after editing text in EditText
                image.setBackgroundResource(R.drawable.second_image);
            }
        });

    }
}
person Veaceslav Gaidarji    schedule 26.12.2012
comment
другой способ использовать изображение drawableLeft и изменить это свойство на другом изображении при редактировании текста - person Veaceslav Gaidarji; 26.12.2012
comment
не могли бы вы добавить пример ?, этот метод кажется мне более чистым - person Daniel Mendel; 26.12.2012
comment
Спасибо, но вместо этого я использовал animationdrawable, чтобы сделать покадровую анимацию, и добавил изображение сбоку от текста редактирования, а не внутри него. - person Daniel Mendel; 28.12.2012