【Android】Android UI 开发_问答_3

Content

    • 对不同屏幕的支持
    • 按钮
    • 文本框
    • 复选框
    • Toast
    • 一个布局案例

链接 【Android】Android UI 开发_问答_2.

对不同屏幕的支持


屏幕大小的分类有哪些?

  • small,normal,large,xlarge

密度的分类有哪些?

  • low (ldpi),medium (mdpi),high (hdpi),extra high (xhdpi)

屏幕的方向有哪些?

  • landscape,portrait 即横向和纵向

为什么需要根据屏幕不同来定义不同的布局文件?不同大小屏幕的布局文件怎么存放?

  • 优化用户体验
    屏幕不同布局需求不同,定义不同的布局文件后,
    系统从对应的布局目录中以你的app所运行的设备的屏幕大小自动调入对应的布局文件
  • 同一目录下,且文件名必须是一样的,只是内容不同 (略懂)
MyProject/res/layout/main.xml
              layout-land/main.xml
              layout-large/main.xml
              layout-large-land/main.xml

为什么需要根据屏幕密度提供不同的 bitmap 资源?怎么做?

  • 提高在不同屏幕密度上的图像质量
  • ldpi 的资源并不总是必须的,
    当你提供 hdpi 的资源的时候,系统会缩放一半适应 ldpi 屏幕 (略懂)
MyProject/res/drawable-xhdpi/awesomeimage.png
              drawable-hdpi/awesomeimage.png
              drawable-mdpi/awesomeimage.png

不同密度的比例是什么?

  • xxhdpi: 3.0
    xhdpi: 2.0
    hdpi: 1.5
    mdpi: 1.0 (baseline参照)
    ldpi: 0.75

按钮


根据按钮上显示的内容,按钮可以分为几种?分别用什么属性设置?

  • 有文本,有图标,二者都有,共三种
  • 文本,Button,用 text 属性设置
    图标,ImageButton,用 src 设置
    文本 + 图标,Button,用 text 设置文本,用 drawableXXX 设置图标

按钮的 onClick 属性有什么用?怎么用?它的值所指定的响应方法在哪里定义,有什么特殊要求?方法的参数是什么?

  • 定义一个按钮的事件处理器
    用户单击按钮时,Button 对象接收一个 单击 事件,添加 onClick 属性的作用就是处理这个事件
  • 添加该属性,属性值是对事件进行响应的 方法名
  • 在 Activity 中定义,必须是 public、返回 void
    方法参数是一个唯一的View参数

还可以怎么设置按钮的监听方法?代码模板是什么?望大家理解该模板

Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Do something in response to button click
    }
});

如何定义按钮的样式?

  • 设置android:backgroud属性为一个 drawable 或 color 资源
    也可以应用某种样式

如何定义无边框按钮?

<Button style="?android:attr/borderlessButtonStyle"/>

如何定制背景?

  • 1.创建三个不同的位图图片,代表 default(无)、pressed(按下) 和 focused(聚焦) 这三种状态
    2.把这些图片放在 res/drawable/ 这个工程目录中,图片名应反映对应按钮状态
    3.在 res/drawable/ 中创建 button_custom.xml,
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_pressed"
          android:state_pressed="true" />
    <item android:drawable="@drawable/button_focused"
          android:state_focused="true" />
    <item android:drawable="@drawable/button_default" />
</selector>
//的顺序非常重要,只有当 pressed 和 focused 均为 false 时,default 才会应用

什么是 ninepatch 图片,该图片中的四条线分别表示什么意义?它的名字怎么命名?相应的 xml 什么用?里面的子标签什么含义?

  • NinePatch(.9)图片,可拉伸的位图图像,有 padding 的图像文件
    左边及上边的线定义可伸缩区域,右边及下边的线定义可绘制区域,四周就是 padding
  • name.9.png
  • 见上面的代码

怎么设置按钮的“.9”背景图片?

  • 将 .9 图片放置在 drawable目录下,设置按钮的 background 属性 (改)
<Button android:background="@drawable/my_button_background"/>

如何使用 android sdk 中的制作.9文件的工具?如果不设置 padding 线,那内容到边之间的 padding 怎么确定,实验一下?

  • 在 android 的 sdk 中的 tools 目录下找到 draw9patch,启动
  • 将上下左右的线拉到对应位置,然后保存
    链接 制作.9文件.

如何在studio中显示代码的行号?学会看错误提示信息,这很重要

  • 1.在代码左边空白区域右击,选择 Show Line Numbers
    2.File > Settings > Editor > General > Appearance > Show Line Numbers

文本框


输入文本框的标签是什么?

  • EditText

如何指定输入文本框的类型?如何组合输入模式?

  • 通过 android:inputType 指定输入类型,因而确定键盘类型
    例如 textEmailAddress、phone 等
  • 使用 | ,来同时组合设置多个值
<EditText android:inputType="textPostalAddress|textCapWords|textNoSuggestions" />

标签属性的值是不是可以通过 java 代码进行修改?

  • 可以

landscape 和 portrait 什么区别?如何在虚拟机上切换?

  • landscape,横向
    portrait,纵向
  • 找到 手机旋转的一个图标

如何设置虚拟机的物理键盘或虚拟键盘?

  • Settings > Language&input > Default > Hardware

什么是输入键盘的 action?默认值是什么?如何设置该 action?如何监听该动作(监听模板代码)?

  • 键盘右下角的按钮,即用户输入完成后的动作
  • Done
    若没有显式指定 action,系统会查看是否有设置了android:focusable的域 (不一定是文本框),
    若有,系统会执行本文本框的 actionNext 动作,这样用户可以进行下一个域的输入
    若无,执行文本框的 actionDone 动作
  • 通过 android:imeOptions
  • 监听
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

如何添加其他的键盘flag与提供自动补全?如何在strings.xml中定义字符数组资源?

  • 设备 landscape 模式下,
    阻止进入全屏输入模式android:imeOptions="flagNoExtractUi"
  • 提供自动补全
    1.AutoCompleteTextView 标签加入布局
    2.定义保存有所有文本补全的数组,放在 res/values/strings.xml 中
    3.在 Activity 或 Fragment 中写入代码
//获取布局文件中 AutoCompleteTextView 的引用
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);

// 从资源中获取字符数组
String[] countries = getResources().getStringArray(R.array.countries_array);

// 创建 adapter,并把它设置到 AutoCompleteTextView 中
ArrayAdapter<String> adapter =
        new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries);
textView.setAdapter(adapter);
  • 例如
<resources>
    <string-array name="countries_array">
        <item>Algeria</item>
        <item>American Samoa</item>
        <item>Angola</item>
        ...
    </string-array>
</resources>

如何在 java 代码中获取字符数组资源从而进行操作?理解代码模板

  • 获取资源
String[] countries = getResources().getStringArray(R.array.countries_array);

复选框


什么是复选框?在布局文件中是哪个标签?

  • 允许用户选择若干项,CheckBox

复选框后的文字怎么加上?

  • 用 text 属性

如何设置复选框的单击事件处理方法?若干复选框可以用同一个事件处理方法进行处理吗?如何在方法中区分选择的是哪个复选框?

  • 用 onClick 属性
  • 可以
  • 用 view.getId 方法
public void onCheckboxClicked(View view) {
    // Is the view now checked?
    boolean checked = ((CheckBox) view).isChecked();

    // Check which checkbox was clicked
    switch(view.getId()) {
        case R.id.checkbox_meat:
            if (checked) {System.out.println("");}
            else {}
            break;
        case R.id.checkbox_cheese:
            if (checked) {}
            else {}
            break;
        // TODO: Veggie sandwich
    }
}

如何修改activity的布局?一个activity同时可以有几个布局?

  • 更改相应的 .java 文件中 onCreate 方法中 setContentView(R.layout.布局文件名);
  • 同时应该只能有一个

什么是无线按钮?在布局文件中是哪个标签?为什么要把这种标签放在RadioGroup中?RadioGroup是哪个布局的子类,这意味着什么?如何设置无线按钮的默认选择?

  • 互斥的⚪单选按钮,RadioButton
  • 为了确保互斥
  • LinearLayout 的子类
  • 可以指定水平或垂直方向 (意味着RadioGroup也可看作线性布局)
  • 设置 checked 属性为 true

如何设置无线按钮的单击事件处理方法?

  • 和 CheckBox 的类似

什么是切换按钮?是哪些标签?如何在java程序中改变按钮的状态?如何响应用户对按钮的操作?(代码模板)

  • 可以在两种状态中切换
  • ToggleButton 和 Switch
//java 中改变 ToggleButton 的状态
ToggleButton toggleButton = (ToggleButton)findViewById(R.id.toggle_button);
toggleButton.setChecked(true);
toggleButton.toggle();

//响应用户操作
ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            // The toggle is enabled
        } else {
            // The toggle is disabled
        }
    }
});

定义某个RadioButton的android:checked为true,意味着该项是默认选中的,但如果并没有定义它的id,在运行时会发生什么情况?

  • RadioButton 不互斥

Toast


注释的快捷键是什么?

  • Ctrl + /

Toast是什么?它也是放在布局文件中吗?makeText方法的三个参数什么含义?

  • 弹出的一个提示信息
  • 不是,代码打开
  • 第一个为 app 的 Context
    第二个为显示的文本信息
    第三个为 toast 持续的时间

什么是context?

  • Context是一个场景,描述的是一个应用程序环境的信息,即上下文,
    代表与操作系统的交互的一种过程
    简单来说就是上下文环境

如何定义toast的显示?

  • 例 将 toast 定位在左上角
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);

如何创建定制的Toast视图?inflater功能是什么?如何设置这种方式的toast中的文字?如何将定制布局应用到toast实例?通过setView方法设置视图的Toast,怎么构造toast实例?

  • 定制一个布局文件 toast_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/toast_layout_root"
              android:orientation="horizontal"
              android:padding="8dp"
              android:background="#DAAA">
              
    <ImageView android:src="@drawable/droid"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_marginRight="8dp"/>
               
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textColor="#FFF"/>
              
</LinearLayout>
  • 将布局文件取出
  • 取出布局中的 TextView 然后 setText
  • 用 setView 将取出的 layout 应用到实例 toast 中
  • 用 new,构造函数参数是 上下文环境的实例 context
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout. toast_layout, (ViewGroup) findViewById(R.id.toast_layout_root));

TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("This is a custom toast");

Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

一个布局案例


layout_weight这个属性是什么含义?

  • 表示在其父 ViewGroup 中的宽度
例 因为 LinearLayout 是布局的根 view,
它的大小又设置为 "match_parent",所以它将充满整个屏幕

RadioGroup是什么?其什么作用?它的父类是哪个?默认方向是什么?怎么改掉?

  • 无线按钮的单选组合框
  • 用来放无线按钮,确保按钮互斥性
  • LinearLayout 类
  • 垂直方向,vertical
  • 通过 android:orientation 更改

RadioButton是什么?为什么要加入RadioGroup中?如何默认选中?它的 id 有什么特别的用处?

  • 无线按钮
  • 确保互斥
  • checked 属性设置为 true
  • 用来区分选中的无线按钮,无 id 时互斥性消失

怎么将MainActivity的布局改掉?

  • 找到 onCreate 回调方法,更改代码中布局文件名 activity_main2
setContentView(R.layout.activity_main2);

如何加入输入的提示信息?

  • hint 属性,无输入时显示的信息

如何将EditText指定为输入密码类型的数据?

  • inputType 属性,设置为 textPassword,或 numberPassword 或其他 …Password

End.

你可能感兴趣的:(Java)