![np.full](https://i-blog.csdnimg.cn/blog_migrate/3ef4f84d2602e5698eb02490bed97ecf.png)
np.full
这是“ Android完整应用程序教程”系列的第一部分。 完整的应用程序旨在提供一种通过互联网搜索电影/演员的简便方法。 在这一部分中,我们将设置Eclipse项目,为主要活动准备用户界面,最后在适当的模拟Android设备上对其进行测试。
让我们从创建一个新的Eclipse项目开始(我想您已经安装了Android SDK和Eclipse插件)。 该项目名为“ AndroidMovieSearchAppProject”,应用程序名为“ MovieSearchApp”(我知道这是一个非常原始的名称)。 请注意,由于不会使用最新的API,因此将Android 1.5(API级别3)用作目标平台。
我们的用户界面将非常简单。 用户将在其中提供搜索查询的文本框,两个单选按钮(指示这是电影搜索还是人物搜索),显示搜索类型的标签以及实际执行搜索的按钮。 搜索结果将在其他活动中显示(将在本系列的后续部分中讨论)。
您可能知道,该接口是通过XML文件创建的,目的是将表示视图与应用程序逻辑分离。 相应的文件名为“ main.xml”,位于“ res / layout”文件夹中。 使用Eclipse编辑器打开它,并确保它包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText android:id="@+id/search_edit_text"
android:text="@string/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<RadioGroup
android:id="@+id/search_radio_group"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton
android:id="@+id/movie_search_radio_button"
android:checked="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/movies" />
<RadioButton
android:id="@+id/people_search_radio_button"
android:checked="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/people" />
</RadioGroup>
<TextView
android:id="@+id/search_type_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
/>
<Button
android:id="@+id/search_button"
android:text="@string/search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
请注意,文本元素不是硬编码的,而是从外部资源,更具体地说是从位于“ res / values”文件夹中的名为“ strings.xml”的文件中获取其值。 这是实现您的应用程序国际化的一个好习惯。 该文件如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MovieSearchAppActivity!</string>
<string name="app_name">MovieSearchApp</string>
<string name="search">Search</string>
<string name="movies">Movies</string>
<string name="people">People</string>
</resources>
这是Android模拟器中的界面外观:
下一步是将这些UI元素连接到我们的代码中,并进行相应的操作,以实现我们的搜索功能。 可以通过findViewById方法进行连接,其中integer参数是XML声明文件中给定元素的唯一ID。
Android UI小部件的一个非常重要的方面是,它们提供了“挂钩”,当用户执行操作时(例如当他单击按钮或遍历小部件时),开发人员可以得到通知。 为了处理单击事件,我们实现了OnClickListener接口,该接口定义了单击视图时要调用的回调。 该界面仅包含一个名为onClick的方法,该方法在单击视图后会被调用。
另一个有用的接口是OnFocusChangeListener ,它定义了视图的焦点状态更改时要调用的回调。 它的唯一方法是onFocusChange ,当视图的焦点状态更改时将调用该方法。
让我们看看如何应用所有这些以创建我们的主Activity 。 我们的主类的代码如下:
package com.javacodegeeks.android.apps.moviesearchapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MovieSearchAppActivity extends Activity {
private static final String EMPTY_STRING = "";
private EditText searchEditText;
private RadioButton moviesSearchRadioButton;
private RadioButton peopleSearchRadioButton;
private RadioGroup searchRadioGroup;
private TextView searchTypeTextView;
private Button searchButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.findAllViewsById();
moviesSearchRadioButton.setOnClickListener(radioButtonListener);
peopleSearchRadioButton.setOnClickListener(radioButtonListener);
searchButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String query = searchEditText.getText().toString();
if (moviesSearchRadioButton.isChecked()) {
longToast(moviesSearchRadioButton.getText() + " " + query);
}
else if (peopleSearchRadioButton.isChecked()) {
longToast(peopleSearchRadioButton.getText() + " " + query);
}
}
});
searchEditText.setOnFocusChangeListener(new DftTextOnFocusListener(getString(R.string.search)));
int id = searchRadioGroup.getCheckedRadioButtonId();
RadioButton radioButton = (RadioButton) findViewById(id);
searchTypeTextView.setText(radioButton.getText());
}
private void findAllViewsById() {
searchEditText = (EditText) findViewById(R.id.search_edit_text);
moviesSearchRadioButton = (RadioButton) findViewById(R.id.movie_search_radio_button);
peopleSearchRadioButton = (RadioButton) findViewById(R.id.people_search_radio_button);
searchRadioGroup = (RadioGroup) findViewById(R.id.search_radio_group);
searchTypeTextView = (TextView) findViewById(R.id.search_type_text_view);
searchButton = (Button) findViewById(R.id.search_button);
}
public void longToast(CharSequence message) {
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
private OnClickListener radioButtonListener = new OnClickListener() {
public void onClick(View v) {
RadioButton radioButton = (RadioButton) v;
searchTypeTextView.setText(radioButton.getText());
}
};
private class DftTextOnFocusListener implements OnFocusChangeListener {
private String defaultText;
public DftTextOnFocusListener(String defaultText) {
this.defaultText = defaultText;
}
public void onFocusChange(View v, boolean hasFocus) {
if (v instanceof EditText) {
EditText focusedEditText = (EditText) v;
// handle obtaining focus
if (hasFocus) {
if (focusedEditText.getText().toString().equals(defaultText)) {
focusedEditText.setText(EMPTY_STRING);
}
}
// handle losing focus
else {
if (focusedEditText.getText().toString().equals(EMPTY_STRING)) {
focusedEditText.setText(defaultText);
}
}
}
}
}
}
我们首先使用setContentView方法为活动设置View 。 使用的视图是由“ main.xml”文件定义的视图。 然后,我们引用所有UI元素,以便可以通过代码对其进行操作。 我们创建两个OnClickListener ,一个用于处理单选按钮的单击,另一个用于在单击按钮时执行搜索。 使用setOnClickListener方法将侦听器附加到UI元素。
关于单选按钮,它们是根据RadioGroup组件定义的。 Android UI框架负责在任何给定时间只允许选择一个RadioButton 。 此外,在运行时,我们可以使用getCheckedRadioButtonId方法找到选择了哪个单选按钮。 请注意,此方法返回单选按钮的全局唯一ID,并且可以用作findViewById方法的参数来获取按钮的引用。
最后,我们创建一个OnFocusChangeListener并使用setOnFocusChangeListener方法将其附加到EditText小部件。 通过我们的实施,我们能够实现下图所示的功能。
当文本框具有焦点并且为空时,您就可以输入搜索查询了。 无论文本框是否具有焦点,查询都保留在那里。 但是,当文本框为空并失去焦点时,将显示预定义的消息。
现在,我们准备尝试我们的应用程序。 这将使用Android SDK提供的模拟器来完成。 从Eclipse内部启动AVD(Android虚拟设备)管理器并创建一个新设备。 给它起一个不同的名称,例如“ Android1.5-SD”,然后选择目标平台(在我们的示例中为Android 1.5)。 我还选择了对SD卡的支持,以防万一。 这是设置的样子:
接下来,在Eclipse中创建一个新的“运行配置”,选择我们的Android项目和“ MovieSearchAppActivity”启动。 这是您应该看到的:
在“目标”选项卡中,选择新创建的AVD,然后单击“应用”和“运行”。
Android仿真器将启动,过一会儿我们的应用程序将出现(如果应用程序没有自动出现,请点击“ MENU”按钮)。
玩这个应用程序。 目前,它不执行任何高级操作,而仅在单击按钮时提供Toast。这将是“ Android完整应用程序教程”系列的第一部分。 您可以在此处找到整个Eclipse项目。
- “ Android完整应用程序教程”系列
- Android文字转语音应用
- 带有Yahoo API的Android反向地理编码– PlaceFinder
- Android基于位置的服务应用程序– GPS位置
- 使用VirtualBox在PC上安装Android OS
- 拥抱Android的强大功能:快速概览
翻译自: https://www.javacodegeeks.com/2010/10/android-full-app-part-1-main-activity.html
np.full