我想在自定义对话框中创建自定义键盘。 它顶部有一个Textview,下面有12个按钮(它是一个数字键盘) 我想要的是:当按下按钮时,它们会更新Textview值。 我不知道放置" OnClickListener"的正确位置。以及如何更新Textview ...
这是键盘布局:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow>
<TextView
android:id="@+id/valor"
android:layout_width="300dp"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<Button
android:id="@+id/btn7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="7"/>
<Button
android:id="@+id/btn8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="8"/>
<Button
android:id="@+id/btn9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="9"/>
</TableRow>
<TableRow>
<Button
android:id="@+id/btn4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="4"/>
<Button
android:id="@+id/btn5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="5"/>
<Button
android:id="@+id/btn6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="6"/>
</TableRow>
<TableRow>
<Button
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1"/>
<Button
android:id="@+id/btn2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2"/>
<Button
android:id="@+id/btn3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3"/>
</TableRow>
<TableRow>
<Button
android:id="@+id/btn0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0"/>
<Button
android:id="@+id/btnP"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="."/>
<Button
android:id="@+id/btnOk"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Ok"/>
</TableRow>
这是MainActivity:
package com.mycompany.myapp;
import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
public class MainActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button teclado = (Button)findViewById(R.id.teclado);
teclado.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
showCustomDialog();
}
});
}
public void showCustomDialog()
{
final Dialog dialog = new Dialog(this);
dialog.getWindow();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.teclado);
dialog.show();
final TextView valor = (TextView) dialog.findViewById(R.id.valor);
Button btn7 = (Button)dialog.findViewById(R.id.teclado);
btn7.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
valor.setText("Test");
}
});
}
}
提前致谢!!
答案 0 :(得分:0)
抱歉,我发现这个实现很奇怪。
我建议使用DialogFragment,你可以将所有内容封装在那里。 http://android-developers.blogspot.ca/2012/05/using-dialogfragments.html
您将能够在该片段中使用正常的setOnClickListener。
Button btn7 = (Button)dialog.findViewById(R.id.btn7); **"why R.id.teclado?"**
btn7.setOnClickListener(this)
您的片段可以使用开关
实现OnClickListener@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btn7:
valor.setText("asdf");
break;
case R.id.btn8:
...
break;
....
}
// TODO Auto-generated method stub
}
答案 1 :(得分:0)
好的,我想就此提出一些基本想法。你可以根据你的要求修改它。
给你的布局一个id。并使用layoutinflater
在对话框中膨胀您的xml
如果您想在对话框中使用xml布局,可以这样做:
LayoutInflater inflater = getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.your_layout_id_here, (ViewGroup) getCurrentFocus());
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialoglayout);
builder.show();
将以上代码放在Button
的onclicklistener中。并通过Switch
案例case 1: "this button id"
检查按钮的视图,然后在文本视图中插入此数字。
希望这能帮到你
答案 2 :(得分:0)
R.id.teclado不在对话框布局
中变化: 按钮btn7 =(按钮)dialog.findViewById(R.id.teclado);
要: 按钮btn7 =(按钮)dialog.findViewById(R.id.btn7);