【Android】安卓开发常用的布局

标签: android 移动开发 布局
717人阅读 评论(0) 收藏 举报
分类:

前言

布局是安卓开发中很基础的部分,作为移动开发的初学者,我也在不断的学习进步中~

正文

这里写图片描述

文件的位置

布局文件的位置

一般都在layout文件夹内。

一个布局文件,一般对应一个Activity,在代码中通过

setContentView(R.layout.first_layout);

将页面跟逻辑关联起来

布局的分类

常见的布局

LinearLayout,线性布局方式

一种使用单个水平行或垂直行来组织子项的布局。它会在窗口长度超出屏幕长度时创建一个滚动条

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="@string/send" />
</LinearLayout>

线性布局

Relative Layout,相对布局

让您能够指定子对象彼此之间的相对位置(子对象 A 在子对象 B 左侧)或子对象与父对象的相对位置(与父对象顶部对齐)。

<?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"
    android:paddingLeft="16dp"
    android:paddingRight="16dp" >
    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/reminder" />
    <Spinner
        android:id="@+id/dates"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/times" />
    <Spinner
        android:id="@id/times"
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentRight="true" />
    <Button
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/times"
        android:layout_alignParentRight="true"
        android:text="@string/done" />
</RelativeLayout>

相对布局

WebView,网页布局

展示网页

<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>
//加载网页
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.example.com");
//网络访问权限
<manifest ... >
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

使用适配器构建布局

如果你的元素是动态加载的,可以用下面的布局。

ListView,列表视图

显示滚动的单列列表。

public class ListViewLoader extends ListActivity
        implements LoaderManager.LoaderCallbacks<Cursor> {

    // This is the Adapter being used to display the list's data
    SimpleCursorAdapter mAdapter;

    // These are the Contacts rows that we will retrieve
    static final String[] PROJECTION = new String[] {ContactsContract.Data._ID,
            ContactsContract.Data.DISPLAY_NAME};

    // This is the select criteria
    static final String SELECTION = "((" +
            ContactsContract.Data.DISPLAY_NAME + " NOTNULL) AND (" +
            ContactsContract.Data.DISPLAY_NAME + " != '' ))";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Create a progress bar to display while the list loads
        ProgressBar progressBar = new ProgressBar(this);
        progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT, Gravity.CENTER));
        progressBar.setIndeterminate(true);
        getListView().setEmptyView(progressBar);

        // Must add the progress bar to the root of the layout
        ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
        root.addView(progressBar);

        // For the cursor adapter, specify which columns go into which views
        String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME};
        int[] toViews = {android.R.id.text1}; // The TextView in simple_list_item_1

        // Create an empty adapter we will use to display the loaded data.
        // We pass null for the cursor, then update it in onLoadFinished()
        mAdapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1, null,
                fromColumns, toViews, 0);
        setListAdapter(mAdapter);

        // Prepare the loader.  Either re-connect with an existing one,
        // or start a new one.
        getLoaderManager().initLoader(0, null, this);
    }

    // Called when a new Loader needs to be created
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        // Now create and return a CursorLoader that will take care of
        // creating a Cursor for the data being displayed.
        return new CursorLoader(this, ContactsContract.Data.CONTENT_URI,
                PROJECTION, SELECTION, null, null);
    }

    // Called when a previously created loader has finished loading
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        // Swap the new cursor in.  (The framework will take care of closing the
        // old cursor once we return.)
        mAdapter.swapCursor(data);
    }

    // Called when a previously created loader is reset, making the data unavailable
    public void onLoaderReset(Loader<Cursor> loader) {
        // This is called when the last Cursor provided to onLoadFinished()
        // above is about to be closed.  We need to make sure we are no
        // longer using it.
        mAdapter.swapCursor(null);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // Do something when a list item is clicked
    }
}

GridView,网格视图

显示滚动的行列网格。

特别推荐

ConstraintLayout,约束布局

这种布局综合的大部分布局的优点,更容易的去调节元素的边距。

详情参考 https://developer.android.com/reference/android/support/constraint/ConstraintLayout.html

以后详细写下相关的文章。

不推荐的布局

由于版本的更新,下面的这些布局不再推荐。官方文档里也没有推荐这些布局了。

  • AbsoluteLayout,绝对位置布局
  • FrameLayout,帧布局
  • TableLayout,表格布局

总结

布局部分,很容易去类比网页开发的部分。

html也是xml,所以对理解这些很方便。

持续的学习就是进步。

参考资料

查看评论

【Android】系统中几种消息机制的一些开发总结

关于Android系统的消息机制,肯定是在开发中经常会遇见和使用到的,最经常使用到的类莫过于是Handler了,例如:系统允许在非UI线程中去更新UI,这时候就需要handler出现来解决这个问题,最...
  • u011494050
  • u011494050
  • 2015-01-22 18:40:54
  • 683

android开发中常用的五大布局

线性布局 线性布局在xml文件中使用来定义。  线性布局可以分为水平和垂直方向的布局,可以 通过android:orientation来定义方向, android:orientation=“ho...
  • u012301501
  • u012301501
  • 2016-12-04 21:09:57
  • 1054

Android开发常用工具类集合

android开发中为了避免重复造轮子,一些常用的工具类可以整理和收集一下,方便下次使用。...
  • xiaoyi848699
  • xiaoyi848699
  • 2016-10-23 17:25:24
  • 977

Android开发常用技术建议

1.Android应用主线程(UI线程)中,将网络请求、数据库操作等耗时的操作从主线程移动到一个单独的线程中。使用AsyncTask或者IntentService来创建后台操作。使用IntentSer...
  • ltl451011
  • ltl451011
  • 2014-04-17 06:28:17
  • 3992

JAVA、android开发常用英语汇总《上》

JAVA、android开发常用英语汇总
  • javaniuniu
  • javaniuniu
  • 2016-08-11 14:29:31
  • 2357

android开发常用支持包

ps:持续更新……android-studio中开发时 5.0之后新特性RecyclerView的支持包 在module相对应.gradle文件中添加: compile 'com.android...
  • qq_33129625
  • qq_33129625
  • 2016-11-05 17:59:40
  • 361

Android 常用布局及基本UI控件

一、Android学习API指南:【了解】 1. 应用的组成部分   App Components 1.1. 应用的基本原理    App Fundamentals 1.2. Activity    ...
  • ElevenDGQ
  • ElevenDGQ
  • 2016-04-20 16:01:35
  • 3296

android开发全部颜色对照表

  • 2014年08月18日 22:15
  • 682KB
  • 下载

Android开发学习之路--UI之基本布局

上一篇文章中主要介绍了ui的控件,这里就学习下布局吧。android的基本布局在layout下主要如图:     从上图可以看出有FrameLayout(单帧布局),LinearLayout(线性...
  • eastmoon502136
  • eastmoon502136
  • 2016-02-06 13:58:07
  • 4361

开发人员应该了解的 Android 常用术语

Action是对Intent发送器意图的描述。一个活动是一个指派给Intent的字符串值。活动字符串可以由Android定义也可以由第三方开发者定义。例如, 在网页URL中使用的android.int...
  • lincyang
  • lincyang
  • 2010-09-16 15:16:00
  • 1612
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 72万+
    积分: 9752
    排名: 2265
    博客专栏
    谢谢支持~
    最新评论