编程和实现自定义拨号器UI

时间:2012-08-22 19:13:19

标签: java android android-layout android-intent android-widget

此处的所有其他问题都与ACTION_CALL或ACTION_DIAL或那些主题有关。我明白了。我需要一个意图。但是,如何实现自定义拨号器?我搜索和搜索过,我找不到任何关于这个主题的内容。我已经设计好了,准备好了,但没有关于如何将它们放在一起的任何内容。

我认为这就像在layout / activity_main.java中添加一些元素和样式一样简单,但事实并非如此。到目前为止,简单的测试刚刚使应用程序在加载时崩溃。像:

<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="@string/title_two"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="phone"
    android:maxLength="11" >
    <requestFocus />
</EditText>

<Button
    android:id="@+id/one"
    android:text="1" />
<Button
    android:id="@+id/two"
    android:text="2" />
<Button
    android:id="@+id/three"
    android:text="3" />
<Button
    android:id="@+id/four"
    android:text="4" />
<Button
    android:id="@+id/five"
    android:text="5" />
<Button
    android:id="@+id/six"
    android:text="6" />
<Button
    android:id="@+id/seven"
    android:text="7" />
<Button
    android:id="@+id/eight"
    android:text="8" />
<Button
    android:id="@+id/nine"
    android:text="9" />
<Button
    android:id="@+id/star"
    android:text="*" />
<Button
    android:id="@+id/zero"
    android:text="0" />
<Button
    android:id="@+id/pound"
    android:text="#" />
<Button
    android:id="@+id/callButton"
    android:text="Call" />
<Button
    android:id="@+id/contacts"
    android:text="Con" />
<Button
    android:id="@+id/del"
    android:text="Del" />

我确信这只是我遇到的一个简单的问题,但我甚至无法在不崩溃的情况下添加任何按钮。然后在src / MainActivity.java中:

public class MainActivity extends Activity {
    Button dialBtn;
    EditText numTxt;

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dialBtn = (Button) findViewById(R.id.button1);
        numTxt = (EditText) findViewById(R.id.editText1);
        dialBtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                try {
                    if (numTxt != null && (numTxt.getText().length()==10 ||numTxt.getText().length()==11)) {
                        startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel: 8880000000" + numTxt.getText())));
                    }else if(numTxt != null && numTxt.getText().length()==0){
                        Toast.makeText(getApplicationContext(), "You must enter a number to call", Toast.LENGTH_SHORT).show();
                    }else if(numTxt != null && numTxt.getText().length()<10){
                        Toast.makeText(getApplicationContext(), "Please check your number and try again", Toast.LENGTH_SHORT).show();
                    }
                } catch (Exception e) {
                    Log.e("DialerActivity", "error: " + e.getMessage(), e);
                }
            }
        });
    }
}

此处唯一的目标是向用户展示拨号器。他们输入他们的号码,他们可以像普通拨号器一样在屏幕上看到它,然后它调用服务的硬编码访问号码,然后在eventListener更改为答案时传递他们拨打的号码。

我承认我是新手,所以有一些明显的错误,我知道,我太新了,看不到它们。我认为这是你可以用Android做的最简单的事情之一,因为那里有一百万个客户拨号器。我不是想做任何花哨的事情,你必须使用该应用程序才能使用该服务,即它不会在后台闲逛,而BroadcastReceiver试图拦截你的传出呼叫,看看你是否想要使用该服务。只是一个简单的拨号应用程序。我哪里错了?这些代码中的一部分直接从书本,在线教程中复制,只是试图让它工作但直接复制并粘贴我无法工作?

1 个答案:

答案 0 :(得分:1)

如果这是您的布局的实际内容,那么有几个问题。

  1. 必须是.xml文件。
  2. 必须具有根元素(即,您必须以特定类型的布局布局您的按钮 - 线性,相对等)。这里是开始的地方:http://developer.android.com/guide/topics/ui/declaring-layout.html
  3. 布局xml中的每个元素都必须具有两个属性:android:layout_width和android:layout_height
  4. 您必须将View.OnClickListener附加到每个按钮。
  5. 您将不得不以特定方式打开按钮。例如,使用3个线性布局来托管主布局中包含的3行数字按钮。
  6. 看起来你刚刚开始,所以我建议你在网上查看一些基本的例子来构建一个简单的Android应用程序。