2013-03-02 2 views
0

Я хочу добавить EditText к холсту в определенных координатах. Что-то вроде этого: enter image description hereДобавление editText в customView

Я пытался использовать код:

 LinearLayout layout = new LinearLayout(context); 

     EditText textView = new EditText(context); 
     textView.setVisibility(View.VISIBLE); 
     textView.setText("Hello world"); 

     layout.addView(textView); 

     layout.measure(canvas.getWidth(), canvas.getHeight()); 
     layout.layout(0, 0, canvas.getWidth(), canvas.getHeight()); 
     layout.setGravity(Gravity.BOTTOM); 

     layout.draw(canvas); 

Но это EditText не показывать клавиатуры на мыши. Вы можете мне помочь?

+2

Вы можете указать, кто у вас есть инициализированный холст и его использование. Вам нужен только текст редактирования с строкой ниже? как эта простая задача, и не нужно брать реализацию холста. –

+0

Мне нужно динамически создавать разные номера этого вида (editText + text), поэтому я выбираю создать свой пользовательский вид с этими элементами, чтобы облегчить будущую работу –

ответ

0

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

Создать новый canvaslayout.xml внутри/папок Реза макета.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:ems="5" > 
     <requestFocus /> 
    </EditText> 
    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/editText1" 
     android:layout_toRightOf="@+id/editText1" 
     android:text="Edit Text" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 
</RelativeLayout> 

Изменить код слишком

LinearLayout layout = findViewById(R.layout.canvaslayout); 
//LinearLayout layout = youractivity.findViewById(R.layout.canvasLayout); 
layout.draw(canvas); 

Programmaticly:

Если вы не хотите использовать XML (я не понимаю, почему нет), вы можете использовать this метод. Вы меняете линейный макет на относительный макет и используете что-то вроде этого, чтобы поместить вид на другой вид.

RelativeLayout.LayoutParams relativeLayoutParams= 
      new RelativeLayout.LayoutParams((RelativeLayout.LayoutParams.WRAP_CONTENT),(RelativeLayout.LayoutParams.WRAP_CONTENT));//create params for new textview 

    relativeLayoutParams.addRule(RelativeLayout.RIGHT_OF, textView.getId());//to align the textview side by side 
+0

Это хорошая идея, но я хочу изменить координаты EditText в другом задания. Иногда мне нужно сделать: EditText + TextView; Иногда мне нужно сделать: TextView + EditText + TextView; или TextView + EditText; поэтому я не могу использовать xml-файл, потому что мне всегда нужно менять координаты EditText. –

+0

Вы можете использовать разные файлы макета XML для каждой возможности. –

+0

Когда я использую файлы xml - он вылетает в layout.draw (canvas); с NullPointerException :( –

Смежные вопросы