Android第一行代码-UI界面

作者 汪小祯 日期 2016-08-04
Android第一行代码-UI界面

龟速的学习进度终于到第三章了,上午学驾照,下午学Android,晚上计划计划旅行/看直播/娱乐。
嗯,认真的码学习笔记。

TextView

文字对齐

android:gravity="center"

字体大小与颜色

android:textSize="24sp"
android:textColor="#00ff00"

Button

方法一-注册监听器的方法

private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//添加事件
}
});
}

方法二-接口的方式注册

public class MainActivity extends Activity implements OnClickListener{
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(this)
}
@Override
public void onClick(View v){
switch(v.getId()){
case R.id.button:
//添加事件
break;
default:
break;
}
}

EditText

隐藏字体

android:hint="Type something here"

设置行数

android:maxLines="2"

获得编辑框内容

private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.edit_text);
String inputText=editText.getText().toString();
}

ImageView

显示图片

android:src="@drawable/ic_launcher"

加载图片

private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.image_view);
imageView.setImageResource(R.drawable.jelly_bean);
}

ProgressBar

进度条控件

静态设置可见属性

三种模式,visible-可见,invisible-不可见但占位置,gone-不可见且不占位置

android:visibility="visible"

动态设置可见属性

``` java
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar)findViewById(R.id.progressBar_bar);
if(progressBar.getVisibility()==View.VISIBLE){
progressBar.setVisibility(View.VISIBLE);
}
}
### 切换样式
将圈形切换成条形
``` java
android:max="100"
style="?android:attr/progressBarStyleHorizontal"

进度条进度

int progress=progressBar.getProgress();
progress=progress + 10;
progressBar.setProgress(progress);

AlertDialog

AlertDialog可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上。

AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("标题");
dialog.setMessage("正文");
dialog.setCancelable(false);
dialog.setPositiveButton("OK",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,int which){
//OK按钮事件
}});
dialog.setNegativeButton("Cancel",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog,int which){
//取消按钮事件
}});
dialog.show();

ProgressDialog

ProgressDialog和AlertDialog类似,不同的是ProgressDialog会显示一个进度条。

ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("This is ProgressDialog");
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(true);
progressDialog.show();

四种基本布局

LinearLayout

线性布局,可以通过android:orientation属性指定排列方向,垂直vertical,水平horizontal

android:orientation="horizontal"

控件参数

android:layout_width - 宽度,可以设置铺满”match_parent”,适当”wrap_content”,自定”2px”
android:layout_height - 高度,可以设置铺满”match_parent”,适当”wrap_content”,自定”2px”
android:layout_gravity - 设置控件在布局中对齐方式,可以设置”top”,”center_vertical”,”bottom”
android:layout_weight - 按照比例的方式指定控件大小
使用方法,两个控件都这样设置,会按1:1比例分割

android:layout_width = “0dp”
android:layout_weight = "1"

RelativeLayout

相对布局,用的比较多,用法比较多,代码就先略过了

FrameLayout

所有的控件都放在左上角

TableLayout

允许我们使用表格的方式来排列控件
例子:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1" >
<TableRow>
<TextView
android:layout_height="wrap_content"
android:text="Account:" />
<EditText
android:id="@+id/account"
android:layout_height="wrap_content"
android:hint="Input your account" />
</TableRow>
<TableRow>
<Button
android:id="@+id/login"
android:layout_height="wrap_content"
android:layout_span="2"
android:text="Login" />
</TableRow>
</TableLayout>

在TableLayout中每加入一个TableRow就表示在表格中添加了一行,然后在TableRow中每加入一个控件就表示在该行中加入了一列。TableRow中的控件是不能指定宽度的。
可以使用android:layout_span=”2”让登陆按钮占两行,使用android:inputType=”textPassword”让其变成密码输入框。
使表格占满整个屏幕宽度。

android:stretchColumns="1"

自定义控件

这里以自定义标题为例子

新建一个title.xml

两个Button,一个TextView构成一个标题栏

新建一个TitleLayout继承LinearLayout

这里写自定义标题栏的事件代码
列子代码:

public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.title, this);
Button titleBack = (Button) findViewById(R.id.title_back);
Button titleEdit = (Button) findViewById(R.id.title_edit);
titleBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((Activity) getContext()).finish();
}
});
titleEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "You clicked Edit button", Toast.LENGTH_SHORT).show();
}
});
}
}

在activity_main.xml引入控件

<com.example.uicustomviews.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
></com.example.uicustomviews.TitleLayout>

单位和尺寸

px - 像素
pt - 磅,一般作为字体单位
dp - 密度,会根据手机分辨率自动调节