2012-06-18 2 views
12

Вопрос в том, как разместить ярлык в блоке editBox в android?Ярлык в блоке editbox в android

Как, например, я хочу поместить «To:» в editbox выбора контакта, который не удаляется, даже если я нажимаю на обратную сторону на экранной клавиатуре.

Я пробовал с андроид: совет, но он удаляется, когда editBox фокусируется или нажимает.

Я пробовал с изображением, но он не выглядит хорошо. Итак, мне нужен метод, с помощью которого я могу реализовать эту метку.

Смотрите визуальную схему required design

+0

это означает, что вы хотите "To:" наряду с введенного текста ???? – Androiduser

+0

@Preet - Да, но «To:» не следует удалять. – GAMA

+0

вы можете просто комбинировать TextView вместе с вашим EditText – Androiduser

ответ

13

Предлагаю вам две идеи:

Если вам это нужно только в нескольких местах, вы можете использовать FrameLayout/merge, чтобы иметь TextView над вашим EditText. Затем, используя отступы в тексте редактирования, вы можете заставить его выглядеть так, как TextView «внутри» EditText. :

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="40dp" > 

     <requestFocus /> 
    </EditText> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:paddingLeft="10dp" 
     android:text="To : " /> 
</FrameLayout> 

Иначе вы можете дополнить свою собственную версию EditText, написав собственный класс. Вот простой пример, вам нужно настроить его немного:

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.text.TextPaint; 
import android.util.AttributeSet; 
import android.widget.EditText; 

public class LabelledEditText extends EditText { 

    public LabelledEditText(Context context) { 
     super(context); 
     mPaddingLeft = getPaddingLeft(); 
    } 

    public LabelledEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mPaddingLeft = getPaddingLeft(); 
    } 

    protected void onDraw(Canvas canvas) { 
     TextPaint textPaint = getPaint(); 
     Rect size = new Rect(); 
     textPaint.getTextBounds(mLabel, 0, mLabel.length(), size); 
     setPadding(mPaddingLeft + size.width(), getPaddingTop(), getPaddingRight(), getPaddingBottom()); 
     super.onDraw(canvas); 

     canvas.drawText(mLabel, mPaddingLeft + size.left, size.bottom + getPaddingTop(), textPaint); 
    } 


    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 

    private String mLabel = "To : "; 
    private int mPaddingLeft; 

} 
+0

thanx XGouchet это действительно сработало ... – akashpatra

+0

Я знаю, что это старый поток, но есть большая проблема с этим кодом, по крайней мере, при работе на Android 5.0, потому что вызов setPadding в onDraw вызывает новый вызов onDraw, который затем вызывает setPadding и так далее. Это можно увидеть, добавив вызов Log.d в onDraw – MTilsted

0

В андроиде метка известна как TextView:

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

      <TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="To:" 
      /> 

      <EditText 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
      /> 
     </LinearLayout> 

EditText не имеет меток, так что вам нужно, и другие. К счастью, ViewGroup сделают это относительно безболезненным для разработчика. EditText использует атрибут fill_parent, поэтому он представлен на этикетке «To:».

+0

эй, john, thnx, но я не хочу, чтобы текст и редактор были бок о бок , я хочу поставить ярлык «To:» в крайнем левом углу внутри edittext – akashpatra

0

Затем используйте этот ...

<LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 



     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="TO:"  
      /> 
    </LinearLayout> 
+0

эй, я не хочу, чтобы текст и редактор были бок о бок, я хочу поставить ярлык «To:» в крайнем левом углу внутри edittext – akashpatra

+0

Для это вы можете использовать класс TextWatcher, который имеет 3 метода для переопределения «AfterTextChanged, BeforeTextChanged, onTextChanged», вы можете объединить «TO», в этом случае ...... Но добавление TextView и установка его текста как «To» - это лучший подход – Androiduser

+0

check out Я отредактировал свой код – Anu

0

Вы можете добавить как этот

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.home_screen); 

EditText edittext = (EditText)getViewById(R.id.edittextid); 
edittext.setText("To:") 
} 

Тогда вы увидите текст, когда вы когда-либо началом деятельности.

Я надеюсь, что это помогает ....

+0

vino, я не хочу, чтобы текст и редактор были бок о бок, я хочу поставить ярлык «To:» в крайнем левом углу внутри edittext – akashpatra

+0

Если это так, вы можете добавить так: EditText edittext = (EditText) getViewById (R.id.edittextid); '' edittext.setText ("To:") 'используйте это в 'OnCreate()'. Затем вы увидите текст, когда начинаете свою деятельность. – GoCrazy

+0

Это должно: оставаться в составе EditText и не удаляться, когда пользователь использует обратное пространство – midhunhk

1

Попробуйте

<LinearLayout 
    android:id="@+id/linearLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="5dp" > 

    <RelativeLayout 
     android:id="@+id/linearlayout2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:text="To:" /> 

     <EditText 
      android:id="@+id/editTextTo" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="20dp" 
      android:background="@android:color/transparent" 
      android:hint="Type your text..." 
      android:singleLine="true" 
      android:textColor="#000000" /> 
    </RelativeLayout> 
</LinearLayout> 
+0

thnx vajaprain, но я не хочу текст и edittext бок о бок, я хочу поставить ярлык «To:» в крайнем левом углу внутри edittext – akashpatra

9

Вы всегда могли иметь TextView + EditText в LinearLayout, которая выглядит как EditText, как показано ниже:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:drawable/edit_text" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:text="To:" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:layout_marginLeft="3dp" 
     android:background="@null" /> 
</LinearLayout> 
+0

очень хороший трюк – Sandeep

-1
<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TO:"  
     /> 
+1

. TO: не должен быть частью EditText. он также не должен удаляться операцией заднего пространства. – midhunhk

0

Вы можете использовать здесь FrameLayout, в течение которого вы можете использовать 3 виджеты:

1.TextView с множеством текста "TO"

  1. Рядом с TextView Вы можете иметь EditText, где вы можете ввести данные

  2. Последняя является ImageButton Показаны Cross Знак ...

Set Background образ FrameLayout с закругленным прямоугольником ,,,,

0

Округленный текст View


<LinearLayout 
    android:id="@+id/linearLayoutSearch" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/transparent" 
    android:padding="5dp" > 

    <RelativeLayout 
     android:id="@+id/linearlayout2" 
     android:layout_width="fill_parent" 
     android:layout_height="36dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:background="@drawable/rounded_textview" 
     android:paddingLeft="5dp" > 

     <TextView 
      android:layout_width="22dp" 
      android:layout_height="22dp" 
      android:layout_centerVertical="true" 
      android:alignParentLeft="true" 
      android:text="To:" /> 

     <EditText 
      android:id="@+id/search" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="25dp" 
      android:layout_marginRight="25dp" 
      android:background="@android:color/transparent" 
      android:hint="Enter your text..." 
      android:imeOptions="actionDone" 
      android:singleLine="true" 
      android:textColor="#000000" /> 
     <ImageView 
      android:layout_width="22dp" 
      android:layout_height="22dp" 
      android:layout_centerVertical="true" 
      android:alignParentRight="true" 
      android:src="@drawable/stop" /> 
    </RelativeLayout> 
</LinearLayout> 

rounded_textview.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:padding="10dp" 
android:shape="rectangle" > 

<solid android:color="#FFFFFF" /> 

<corners 
    android:bottomLeftRadius="15dp" 
    android:bottomRightRadius="15dp" 
    android:topLeftRadius="15dp" 
    android:topRightRadius="15dp" /> 

</shape> 
Смежные вопросы