关闭

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

标签: android移动开发布局
442人阅读 评论(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,所以对理解这些很方便。

持续的学习就是进步。

参考资料

2
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android开发:界面布局的基本使用

问题提出 在android开发中,一个好的程序,除了强大的功能以外,还要有一个能吸引别人眼球的界面。纵观当下流行的诸多Android软件,那些绚丽多彩,美轮美奂的程序界面与手触屏完美结合,给我们...
  • xipiaoyouzi
  • xipiaoyouzi
  • 2013-08-27 18:11
  • 17563

Android 常用布局及基本UI控件

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

Android开发重点难点:RelativeLayout(相对布局)详解

Android开发重点难点:RelativeLayout(相对布局)详解
  • nocol123
  • nocol123
  • 2016-12-04 18:11
  • 1377

android常用布局介绍【潭州安卓开发视频入门到精通全集】.ppt

  • 2015-06-09 20:01
  • 1.57MB
  • 下载

Android 开发:(二)安卓常用5大布局方式

一、Android中常用的5大布局方式有以下几种: 1.线性布局(LinearLayout):按照垂直或者水平方向布局的组件; 2.帧布局(FrameLayout) :组件从屏幕左上方(0,0)布...
  • Kevindongkun
  • Kevindongkun
  • 2017-03-06 20:13
  • 404

安卓开发技巧一:深入理解Android布局中Layout_weight的属性

今天开始将要为大家介绍一些安卓开发过程将要用到的一些技巧,这些技巧全部来自网络搜集,或者自己在企业做项目的时候总结出来的,利用这些技巧将会对我们开发带来非常方便的便捷性。 先来记录一下这一段时间的技巧...
  • u011131296
  • u011131296
  • 2014-12-08 13:58
  • 1674

Android开发(一、初窥安卓--4.界面布局)

布局定义用户界面的视觉结构,如Activity或应用小部件的 UI。您可以通过两种方式声明布局: 在 XML 中声明 UI 元素。Android 提供了对应于 View 类及其子类的简明 XML ...
  • qq_33337811
  • qq_33337811
  • 2017-05-18 15:40
  • 440

安卓开发笔记(三)android 相对布局属性

Android RelativeLayout布局  android:layout_marginTop="25dip" //顶部距离  android:gravity="left" //空间布局位...
  • qq_24451605
  • qq_24451605
  • 2015-01-27 03:40
  • 302

安卓常用布局控件、监听器总结

布局管理器   名称 作用 要点 特点 总结 备注 LinearLayout 线性布局 控制组件 横向 或者 纵向 排列 android:layout_g...
  • miaozhenzhong
  • miaozhenzhong
  • 2016-11-19 11:38
  • 370

安卓常用布局控件、监听器总结

布局管理器 名称 作用 要点 特点 总结 备注 LinearLayout 线性布局 控制组件 横向 或者 纵向 排列 android:layout_gravity 是控制组...
  • u013901909
  • u013901909
  • 2015-11-26 09:27
  • 1445
    个人资料
    • 访问:590453次
    • 积分:8562
    • 等级:
    • 排名:第2677名
    • 原创:292篇
    • 转载:13篇
    • 译文:4篇
    • 评论:73条
    博客专栏
    微信订阅号
    欢迎加入QQ群
    玩家老黄历(微信小程序)
    谢谢支持~
    最新评论