美文网首页android基础
Android入门篇之UI设计

Android入门篇之UI设计

作者: ADVANCE_ae | 来源:发表于2016-07-01 18:26 被阅读309次

View

1.TextView和EditText

   TextView用来显示文本信息,EditText用来编辑输入文本信息。EditText继承自TextView,TextView继承   
自View。
   Xml中常用的一些属性:
    1. android:layout_width="match_parent" 表示该控件显示的宽度
    2. android:layout_height="wrap_content" 表示该控件显示的高度
    设置成wrap_content:表示高度或者宽度包裹住内容。
    设置成match_parent:表示填满父控件。
    也可以设置成具体的数值,eg,45dp。
    上述两个属性是View视图都必须设置的属性。
    3. android:text="@string/app_name" 显示的内容。这是规范的写法,将文字存放到string.xml中name=app_name的文本。
    4. android:textColor="@color/colorPrimary" ,设置文本颜色。这是规范的写法,将颜色值存放到colors.xml中name=colorPrimary的色值。
    5. android:gravity = "center" ,设置文本居中。
    6. android:textSize="@dimen/common_text_size",设置文本的字体大小,文本字体大小单位习惯用"sp",长度单位习惯用"dp"。
    7. android:layout_marginTop = "@dimen/margin_top" 设置上边距 
    8. android:layout_marginBottom="@dimen/margin_bottom" 设置底边距
    9. android:layout_marginLeft="@dimen/margin_left" 设置左边距
   10. android:layout_marginRight="@dimen/margin_right" 设置右边距
   11. android:drawableLeft="@mipmap/ic_launcher"     可以在文字的左边显示一个图片         
        android:drawableBottom="@mipmap/ic_launcher"  可以在文字的底部显示一个图片         
        android:drawableRight="@mipmap/ic_launcher"  可以在文字的右边边显示一个图片         
        android:drawableTop="@mipmap/ic_launcher"  可以在文字的上边显示一个图片         
        android:drawablePadding="@dimen/margin" 设置图片和文字的间距
 EditText几个不同于TextView的常见属性:
   1. android:hint="@string/hint" 表示在输入之前的提示,当EditText
      获取焦点,并输入文字时,该文本自动消失,起提示作用。
   2.android:password = "true"。表示该文本输入框是用来输入密码的,输入的文本会自动转换成".",起到隐藏用户密码的作用。

2.Button

  一个按钮,用法设置和TextView基本一样。区别在于Button可以设置按钮的效果以及事件的监听。
 <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="100dp"
    android:layout_marginLeft="@dimen/margin_left"
    android:layout_marginRight="@dimen/margin_right"
    android:layout_marginBottom="@dimen/margin_bottom"
    android:layout_marginTop="@dimen/margin_top"
    android:background="@drawable/button"
    android:text="@string/button_name"
    android:textColor="@color/colorPrimary"
    android:textSize="@dimen/common_text_size"
    android:id="@+id/btn_login"
    android:onClick="buttonOnClick" <!-- 设置点击事件的一种方式,可以不用findViewById(id)找到
                                    id,因为Android系统使用了反射可以调用到该方法,实际开发中
                                    基本不用,都是通过找到按钮的id,再进行事件的监听。-->
    />

  /**
    * 点击事件,因为采用的反射,此处必须保证该方法是public
    */
  public void buttonOnClick(View v){
        //....点击上述的按钮之后进行的操作。
  }

3.ImageView

  用于展示图片,与TextView一样,区别在于ImageView是用于显示图片。
    <ImageView    
        android:id="@+id/iv_image"      
        android:layout_width="wrap_content"          
        android:layout_height="wrap_content"      
        android:src="@mipmap/ic_launcher"    
        android:background="@mipmap/bg1"        
        android:onClick="onImgClick"    
        android:scaleType="center"    />

4.自定义View

关于自定义View可以看看下面这两位仁兄的。
AigeStudio
张鸿洋

Dialog

   对话框是Android系统在Activity或者其他组件运行过程中提供的一种资源消耗很小的提示机制,它可以帮助
应用完成一些必不可少的提示功能,还能给用户提供良好的交互功能,操作简单。

1.提示对话框

   应用场景很多,比如退出应用时,弹出一个提示框,让用户决定是否退出程序等。

   new AlertDialog.Builder(this)
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setTitle(R.string.alert)
    .setMessage(getString(R.string.is_quit))
    .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    })
    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //to do something cancel     
        }
    })
   .create().show();

2.单选对话框

重点在于Builder实例对象设置setSingleChoiceItems,表示单选对话框。

  new AlertDialog.Builder(this)
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setTitle(R.string.alert)
    .setMessage(getString(R.string.is_quit))
    .setSingleChoiceItems(array,1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //which 列表中点击的单选的position
        }
    })
    .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    })
    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //to do something cancel
        }
    })
    .create().show();

3.复选对话框

重点在于Builder实例对象设置setMultiChoiceItems,表示多选对话框。

new AlertDialog.Builder(this)
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setTitle(R.string.alert)
    .setMessage(getString(R.string.is_quit))
        .setMultiChoiceItems(array, null, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {

            }
        })
    .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    })
    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //to do something cancel
        }
    })
    .create().show();

4.列表对话框

重点在于Builder实例对象设置setItems,表示列表对话框。

 new AlertDialog.Builder(this)
        .setIcon(android.R.drawable.ic_dialog_alert)
        .setTitle(R.string.alert)
        .setItems(array, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                
            }
        })
        .create().show();

5.进度条对话框(ProgressDialog)

Android 系统的进度条对话框为人机之间提供了良好的交互体验,它的使用范围非常广,系统提供了圆形和水平两种进度条。
圆形进度条:

    ProgressDialog dialog = new ProgressDialog(this);  
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 设置进度条的形式为圆形转动的进度条  
    dialog.setCancelable(true);// 设置是否可以通过点击Back键取消  
    dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条  
    dialog.setIcon(R.drawable.ic_launcher);//  
    // 设置提示的title的图标,默认是没有的,如果没有设置title的话只设置Icon是不会显示图标的  
    dialog.setTitle("提示");  
    dialog.setMessage("这是一个圆形进度条");  
    dialog.show();  

水平进度条:

ProgressDialog dialog = new ProgressDialog(this);  
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置水平进度条  
dialog.setCancelable(true);// 设置是否可以通过点击Back键取消  
dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条  
dialog.setIcon(R.drawable.ic_launcher);// 设置提示的title的图标,默认是没有的  
dialog.setTitle("提示");  
dialog.setMessage("这是一个水平进度条");  
dialog.show();

6.日期时间选择对话框

时间选择对话框与日期选择对话框操作极其相似,它是用来设置时间。
  Calendar calendar = Calendar.getInstance();
    new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

        }
    },calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true).show();

7.拖动对话框

应用场景:类似设置音量大小或者设置屏幕大小。

    Dialog dialog = new Dialog(this);
    dialog.setTitle("拖动对话框");
    dialog.setContentView(R.layout.seek_bar);
    SeekBar seekBar = (SeekBar) dialog.findViewById(R.id.seekBar);
    seekBar.setMax(100);
    final TextView textView = (TextView) dialog.findViewById(R.id.textView);
    textView.setText("当前买的进度为:"+ seekBar.getProgress());
    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            //当进度条变化时回调该函数
            textView.setText("当前买的进度为:"+ seekBar.getProgress());
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            //开始拖动时回调
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            //停止拖动时回调
        }
    });
    dialog.show();

seek_bar.xml布局:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_margin="10dp" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/seekBar"
        android:layout_centerHorizontal="true" />
    </RelativeLayout>

8.自定义对话框

一般说来,Android系统提供的这些对话框的风格,背景都是原生的,肯定不能满足我们在实际开发中的个性化需求,所以一般来说,我们都会自定义Dialog并设置其中的一些属性来改变对话框的风格和展示的位置,从而满足需求。

public class MyDialog extends Dialog {
    private Window window;

    public MyDialog(Context context) {
        super(context);

        init();
    }

    private void init() {
        //获取窗口管理对象
        window = this.getWindow();
        //去掉系统默认的对话框背景
        window.setBackgroundDrawable(new ColorDrawable(0));
        //获取窗口参数
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        //设置对话框显示在屏幕的顶部,默认是显示在屏幕的中心
        layoutParams.gravity = Gravity.TOP;
        //设置外部单击可以回收对话框
        setCanceledOnTouchOutside(true);
        //去掉对话框的标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //设置对话框的内容
        window.setContentView(R.layout.dialog_my);
    }
}

菜单

1.上下文菜单(ContextMenu)

Android系统中的ContextMenu类似于PC中的右键弹出菜单,当一个视图注册了上下午菜单时,长按该视图对象将会出现一个提供相关功能的浮动菜单.上下文菜单可以被注册到任何视图对象中,最常见的是用于列表视图ListView中,,但上下文菜单不支持图标和快捷键。

使用步骤:
1.在Activity中使用上下午菜单,重写onCreateContextMenu() 和 onContextItemSelected()方法。
2.为视图控件View中注册上下文菜单,使用registerForContextMenu(View)方法。
3.在onCreateContextMenu(...ContextMenu menu)中添加菜单项menu.add(...)。
4.在onContextItemSelected()中通过设置菜单的id来实现菜单子项的监听。

可以看看这位哥们写的这系列,非常详细:
CodingMyWorld

2.选项菜单

使用步骤:
1.在Activity中复写onCreateOptionsMenu(...)和onOptionsItemSelected(...)方法。
2.在onCreateOptionsMenu(Menu menu)中添加菜单选项。有两种方式,一种是调用menu.add(...);二是从布局文件中加载,在res下的menu文件夹中,填写相应的选项。
3.在onOptionsItemSelected(...)通过设置菜单的id来实现菜单子项的监听。

3.下拉菜单(Spinner可以实现这个效果)

使用步骤:
1.获取Spinner实例对象,在java中通过findViewById(..)来获取,意味需要在xml布局中设置。
2.为Spinner配置一个数据适配器(ListAdapter),用来提供数据的显示控制。
3.监听Spinner的数据单击事件。

xml中引用:

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/languages"
      />   

android:entries="@array/languages",Spinner的数据集合是从资源数组languages中获取的,languages数组资源定义在values/arrays.xml中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="languages">
        <item>c语言</item>
        <item>php</item>
        <item>android</item>
        <item>java </item> 
        <item>html5</item>
    </string-array>
</resources>

为选项单击设置监听器:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, 
                int pos, long id) {

        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
       
        }
    });

Toast

1.系统Toast

  Toast就是我们经常看到app上弹出的提示。现在Google推荐使用Snackbar来替代.
  系统默认的Toast只能设置文字和显示特定的时间.

Toast

2.自定义Toast

 步骤:
  1.继承Toast
  2.自定义Toast布局.
    Toast toast =  new Toast(this);
    toast .setDuration(Toast.LENGTH_LONG);
    toast.setView(layout);
    toast.setGravity(Gravity.CENTER,0,0);
    toast.show();

相关文章

网友评论

    本文标题:Android入门篇之UI设计

    本文链接:https://www.haomeiwen.com/subject/regfjttx.html