小工具知识网

当前位置: 首页 > 行业知识 > 河北工业大学Android实验二——Android用户界面

行业知识

河北工业大学Android实验二——Android用户界面

2026-11-04 21:25:43 来源:互联网转载

本实验是用USB连接我的破手机(Vivo IQOO neo3)完成的,安卓版本几乎是最新的,所以实验报告中的代码有些过时的都已经修改,完全可以在最新版使用!


实验二 Android用户界面

一、实验目的

1.加深对用户界面的控件的理解和使用。

2.掌握各种界面布局的用法。

3.掌握选项菜单、子菜单和快捷菜单的使用方法。

二、实验内容

1.建立一个“ButtonDemo”的程序包含Button和ImageButton两个按钮上方是“Button按钮下方是一个ImageButton控件。

2.建立一个“CheckboxRadiobuttonDemo”程序包含五个控件,从上至下分别是TextView01、CheckBox01、CheckBox02、RadioButton01、RadioButton0,当选择RadioButton01,RadioButton02则无法选择?

3.建立一个“TabDemo”程序包含三个XML文件,分别为tab1.xml、tab2.xml和tab3.xml,这3个文件分别使用线性布局、相对布局和绝对布局示例中的main.xml的代码,并将布局的ID分别定义为layout01、lay out02和layout03

4.建立一个“MyContextMenu”程序,来完成Android菜单的功能。

三、实验仪器、设备

装有 Java JDK7.0 、 Android 、 Eclipse 等软件的微机

四、实验步骤

1.ButtonDemo

(1)MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button button = (Button) findViewById(R.id.button);        ImageButton imageButton = (ImageButton) findViewById(R.id.image_button);        button.setOnClickListener(this);        imageButton.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId())        {            case R.id.button:                Toast.makeText(MainActivity.this,"这是一个button",Toast.LENGTH_SHORT).show();                break;            case R.id.image_button:                Toast.makeText(MainActivity.this,"这是一个imageButton",Toast.LENGTH_SHORT).show();                break;        }    }}

(2)activity_main.xml

        

(3)实验步骤

点击button按钮,出现如下提示:

点击imageButton按钮,出现如下提示:

1.CheckboxRadiobuttonDemo

(1)MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private TextView textView011;    private TextView textView012;    private CheckBox checkBox01;    private CheckBox checkBox02;    private RadioButton radioButton01;    private RadioButton radioButton02;    private TextView textView02;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView011 = (TextView) findViewById(R.id.TextView011);        textView012 = (TextView) findViewById(R.id.TextView012);        textView02 = (TextView) findViewById(R.id.TextView02);        checkBox01 = (CheckBox) findViewById(R.id.CheckBox01);        checkBox02 = (CheckBox) findViewById(R.id.CheckBox02);        radioButton01 = (RadioButton) findViewById(R.id.RadioButton01);        radioButton02 = (RadioButton) findViewById(R.id.RadioButton02);        checkBox01.setOnClickListener(this);        checkBox02.setOnClickListener(this);        radioButton01.setOnClickListener(this);        radioButton02.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId())        {            case R.id.CheckBox01:                textView011.setText("checkBox 01 is checked?-" + String.valueOf(checkBox01.isChecked()));                break;            case R.id.CheckBox02:                textView012.setText("checkBox 02 is checked?-" + String.valueOf(checkBox02.isChecked()));                break;            case R.id.RadioButton01:                textView02.setText("RadioButton1 is selected");                break;            case R.id.RadioButton02:                textView02.setText("RadioButton2 is selected");                break;        }    }}

(2)activity_main.xml

                                            

(3)实验步骤

打开应用,随机点击checkbox和radiobutton,观察textview文字内容。同时可以观察到radiobutton01与radiobutton02不可以同时选择。

3.TabDemo采用了ViewPager2+ BottomNavigationView实现了比较新版本的导航栏切换

(1)MainActivity.java

public class MainActivity extends AppCompatActivity {    private BottomNavigationView bottomNavigationView;    private ViewPager2 viewPager2;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.tabhost);        viewPager2 = findViewById(R.id.viewpager2bottom);        bottomNavigationView = findViewById(R.id.bootomnav2);        ViewPageAdapter myViewPager2BottomAdapter =                new ViewPageAdapter(this, initFragmentList());        viewPager2.setAdapter(myViewPager2BottomAdapter);        //设置 bottomNavigationView 的item 的点击事件 设置viewPager2的联动        bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {            @Override            public boolean onNavigationItemSelected(@NonNull MenuItem item) {                int itemId = item.getItemId();                switch (itemId) {                    case R.id.liner:                        viewPager2.setCurrentItem(0);                        break;                    case R.id.relative:                        viewPager2.setCurrentItem(1);                        break;                    case R.id.absolute:                        viewPager2.setCurrentItem(2);                        break;                }                return true;            }        });        viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {            @Override            public void onPageSelected(int position) {                super.onPageSelected(position);                switch (position) {                    case 0:                        bottomNavigationView.setSelectedItemId(R.id.liner);                        break;                    case 1:                        bottomNavigationView.setSelectedItemId(R.id.relative);                        break;                    case 2:                        bottomNavigationView.setSelectedItemId(R.id.absolute);                        break;                }            }        });    }    private List initFragmentList() {        List fragmentList = new ArrayList();        fragmentList.add(new table1());        fragmentList.add(new table2());        fragmentList.add(new table3());        return fragmentList;    }}

(2)tabhost.xml

        

(3)三个布局fragment

                                                                                                

(4)fragment代码举例(table1为例)

public class table1 extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        return inflater.inflate(R.layout.table1, null);    }}

(5)实验步骤

切换三个布局,查看效果。

  1. MyContextMenu

    (1)MainActivity.java

public class MainActivity extends Activity {    final static int CONTEXT_MENU_1 = Menu.FIRST;    final static int CONTEXT_MENU_2 = Menu.FIRST + 1;    final static int CONTEXT_MENU_3 = Menu.FIRST + 2;    TextView LabelView = null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        LabelView = (TextView) findViewById(R.id.label);        registerForContextMenu(LabelView);    }    @Override    public void onCreateContextMenu(ContextMenu menu,                                    View v, ContextMenu.ContextMenuInfo menuInfo) {        menu.setHeaderTitle("快捷菜单标题");        menu.add(0, CONTEXT_MENU_1, 0, "菜单子项1");        menu.add(0, CONTEXT_MENU_2, 1, "菜单子项2");        menu.add(0, CONTEXT_MENU_3, 2, "菜单子项3");    }    @Override    public boolean onContextItemSelected(MenuItem item) {        switch (item.getItemId()) {            case CONTEXT_MENU_1:                LabelView.setText("菜单子项1");                return true;            case CONTEXT_MENU_2:                LabelView.setText("菜单子项2");                return true;            case CONTEXT_MENU_3:                LabelView.setText("菜单子项3");                return true;        }        return false;    }}

(2)activity_amin.xml

    

(3)实验步骤

因为是要实现快捷菜单,所以长按手机屏幕可以呼出菜单。

五、实验思考题

1.建立一个程序 SpinnerDemo 包含 3 个子项 Spinner 控件

(1)MainActivity.java

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Spinner spinner = (Spinner) findViewById(R.id.spinner);        List list = new ArrayList();        list.add("学生信息");        list.add("计201");        list.add("李东");        list.add("205883");        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,list);        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        spinner.setAdapter(adapter);    }}

(2)activity_main.xml

        

(3)实验步骤

运行程序,并且点击。

2.建立一个 ListViewDemo 程序,包含四个控件,从上至下分别为 TextView01 、ListView01 、 ListView02 和 ListView03

(1)MainActivity.java

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        final TextView textView = (TextView) findViewById(R.id.text_view_01);        ListView listView = (ListView) findViewById(R.id.list_view_01);        List list = new ArrayList();        list.add("学校信息");        list.add("河北工业大学");        list.add("人工智能与数据科学学院");        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);        listView.setAdapter(adapter);        AdapterView.OnItemClickListener listViewListener = new AdapterView.OnItemClickListener(){            @Override            public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3)  {                String msg = "父View:" + arg0.toString() + "\n"                        + "子View:" + arg1.toString() + "\n"                        + "位置:" + String.valueOf(arg2) + "\n"                        + "ID:" + String.valueOf(arg3) + "\n";                textView.setText(msg);            }        };        listView.setOnItemClickListener(listViewListener);    }}

(2)activity_main.xml

                

(3)实验步骤

分别点击三个item,TextView中显示的内容有所变化。

3.AndroidAndroid界面框架是如何实现按键事件和触摸事件的?

(1)按键事件

当用户引发了按键事件后,过程通过调用onKey() 函数进行处理。如果界面控件设置了事件监听器,则事件将先传给监听器。如果没有设置,界面事件会直接传递给界面控件的其他事件处理函数。但即便设置了监听器,界面事件也可以再次传递给其他事件处理函数,这由处理函数的返回值决定。

(2)触摸事件

当用户引发了触摸事件后,过程通过调用 onTouch() 函数进行处理。函数通过对传入参数中MotionEvent调用getAction()函数获取类型,然后对不同触摸事件进行处理。过程也需要设置触摸监听器,并在函数中增加处理逻辑,比如获取坐标getX()、getY(),获取压力值getPressure(),获取接触点大小getSize()等等。一般触摸事件以ACTION_DOWN事件开始,经历0或者若干个ACTION_MOVE事件,以ACTION_UP结束。

六、实验感想

通过本次实验,我熟悉了各种基础控件和布局的使用方法。并尝试用fragment替代目前过时的tabhost来完成实验内容。了解了各种控件的监听和处理函数构成,并且成功使用函数完成了实验程序。最后归纳总结按键事件和触摸事件,让我对Android系统对事件的区别和处理上有了更加深刻的理解。

上一篇:网站备案怎么申请流程?

下一篇:怎么采购服务器机柜?