百度贴吧布局框架的研究与实现(Android版本)

百度贴吧布局框架的研究与实现(Android版本) 的源码 博客地址:http://blog.youkuaiyun.com/ace1985/article/details/7824431 立即下载

还记得几个月前刚接触“百度贴吧”这款应用时,瞬间就被它的悬浮式标题栏以及标签栏所吸引,虽然当时身边有个UI的MM说悬浮式一般都是具备隐藏的功能时才设计成这样的,一般情况下还是用直通式的好,在这里我也不讨论孰优孰劣,截取两个图,大家自己品味下。

悬浮式标题栏和标签栏:(百度贴吧);直通式标题栏和标签栏:(QQ空间)

  

本文的目的就是研究下百度贴吧的这个标题栏和标签栏的实现原理;

1、 悬浮式标题栏的实现

实现原理有两种:1)在布局文件中设置标题栏的layout_margin属性;2)给标题栏设置一个9-patch格式的background图片,在这种图片上设置上下左右的空白间隔,如下图所示,背景图片的top、left和right分别有一个像素的空白,bottom则是两个像素。

使用第二种方式实现的标题栏的布局文件如下:

<!-- 标题栏 -->
    <LinearLayout
        android:id="@+id/home_layout_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_gravity="top"
        android:background="@drawable/title_bg"
        android:gravity="center" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/home_topbar_bg"
            android:gravity="center"
            android:orientation="horizontal" >

            <!-- 我的贴吧 -->
            <ImageButton
                android:id="@+id/home_bt_like"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_gravity="center"
                android:layout_margin="0.0dip"
                android:layout_weight="1.0"
                android:background="@null"
                android:padding="0.0dip"
                android:paddingBottom="2.0dip"
                android:scaleType="center"
                android:src="@drawable/home_bt_like_on" />

            <!-- 我的标签 -->
            <ImageButton
                android:id="@+id/home_bt_mark"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_gravity="center"
                android:layout_margin="0.0dip"
                android:layout_weight="1.0"
                android:background="@null"
                android:padding="0.0dip"
                android:paddingBottom="2.0dip"
                android:scaleType="center"
                android:src="@drawable/home_bt_mark" />
        </LinearLayout>
    </LinearLayout>

其中title_bg就是用来实现悬浮效果的9-patch背景图片,这里为了优化视觉上的效果,在背景图片上又加了一层图片,也就是home_topbar_bg,加与不加的对比效果如图:

我的贴吧和我的书签这两个按钮的按下与松开的是通过切换android:background和android:src的图片资源来实现的,而没有采用通常的selector方式,代码中设置按钮的单击响应函数,更换按钮图片资源的关键代码如下:

	mButtonLike.setBackgroundResource(R.drawable.home_topbar_bt);
	mButtonLike.setImageResource(R.drawable.home_bt_like_on);
	mButtonMark.setBackgroundDrawable(null);
	mButtonMark.setImageResource(R.drawable.home_bt_mark);

2、 悬浮式标签栏的实现

标签栏的实现有很多种组合,比较省事的是使用系统提供的TabHost+TabWidget,比较自由的是使用TabHost+RadioGroup,下面使用第二种方式。

标签栏悬浮效果同样是通过9-patch背景图片实现的,如下图:

标签栏的实现必须具备三个基本元素,如下图所示,分别是1)id为@android:id/tabhost的<TabHost>标签;2)id为@android:id/tabcontent的<FrameLayout>标签;3)id为@android:id/tabs的<TabWidget>标签。如下图所示:

由于这里我们使用TabHost+RadioGroup的方式,也就是使用RadioGroup代替TabWidget,所以布局文件中TabWidget的可见性设置为gone,紧接上面布局的是RadioGroup的布局:

        <FrameLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_marginTop="-10.0dip"
            android:background="@drawable/maintab_toolbar_bg"
            android:paddingLeft="7.0dip"
            android:paddingRight="7.0dip" >

            <RadioGroup
                android:id="@+id/main_radio"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:orientation="horizontal" >

                <RadioButton
                    android:id="@+id/radio_home"
                    style="@style/main_tab_bottom"
                    android:drawableTop="@drawable/tabs_home"
                    android:text="@string/bar" />

                <RadioButton
                    android:id="@+id/radio_mention"
                    style="@style/main_tab_bottom"
                    android:drawableTop="@drawable/tabs_sort"
                    android:text="@string/remind" />

                <RadioButton
                    android:id="@+id/radio_person_info"
                    style="@style/main_tab_bottom"
                    android:drawableTop="@drawable/tabs_search"
                    android:text="@string/person_info" />

                <RadioButton
                    android:id="@+id/radio_more"
                    style="@style/main_tab_bottom"
                    android:drawableTop="@drawable/tabs_more"
                    android:text="@string/more" />
            </RadioGroup>

            <TextView
                android:id="@+id/message_mention"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top|left|center"
                android:layout_marginLeft="115.0dip"
                android:layout_marginTop="-5.0dip"
                android:background="@drawable/message_tips"
                android:gravity="center"
                android:text=""
                android:textColor="#ffffffff"
                android:textSize="13.0sp"
                android:visibility="visible" />

            <TextView
                android:id="@+id/message_person"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top|left|center"
                android:layout_marginLeft="190.0dip"
                android:layout_marginTop="-5.0dip"
                android:background="@drawable/message_tips"
                android:gravity="center"
                android:text=""
                android:textColor="#ffffffff"
                android:textSize="13.0sp"
                android:visibility="visible" />
        </FrameLayout>

其中

1) maintab_toolbar_bg 是标签栏的背景图,实现悬浮效果;

2) RadioButton中的                   

android:drawableTop="@drawable/tabs_sort"

android:text="@string/remind"

组合可以轻松实现图片上文字下的效果;

3) FrameLayout中的android:layout_marginTop="-10.0dip"实现标签栏与上方id为tabcontent的FrameLayout部分重叠的效果(10.0dip);

4)两个TextView和FrameLayout配合实现下图中标签右上角的消息个数提示功能

接下来就是代码如何实现标签的添加,标签的点击响应等等,直接看代码了:

package com.hust.iprai.wen;

import android.app.AlertDialog;
import android.app.TabActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.TabHost;
import android.widget.TextView;

public class TiebaActivity extends TabActivity implements
		CompoundButton.OnCheckedChangeListener {

	private static final String HOME_TAB = "home_tab";
	private static final String MENTION_TAB = "mention_tab";
	private static final String PERSON_TAB = "person_tab";
	private static final String MORE_TAB = "more_tab";

	private Intent mHomeIntent = null;
	private Intent mMentionIntent = null;
	private Intent mPersonIntent = null;
	private Intent mMoreIntent = null;

	private TabHost mTabHost = null;

	private TextView mMessageTipsMention = null;
	private TextView mMessageTipsPerson = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.maintabs_activity);

		mTabHost = getTabHost();
		initIntents();
		initTips();
		initRadios();
		setupIntents();
	}
	
	private void initIntents() {
		mHomeIntent = new Intent(this, HomeActivity.class);
		mMentionIntent = new Intent(this, MentionActivity.class);
		mPersonIntent = new Intent(this, PersonInfoActivity.class);
		mMoreIntent = new Intent(this, MoreActivity.class);
	}
	
	private void initTips() {
		mMessageTipsMention = (TextView) findViewById(R.id.message_mention);
		mMessageTipsPerson = (TextView) findViewById(R.id.message_person);
		mMessageTipsMention.setText("2");
		mMessageTipsPerson.setText("4");
	}

	private void initRadios() {
		((RadioButton) findViewById(R.id.radio_home))
				.setOnCheckedChangeListener(this);
		((RadioButton) findViewById(R.id.radio_mention))
				.setOnCheckedChangeListener(this);
		((RadioButton) findViewById(R.id.radio_person_info))
				.setOnCheckedChangeListener(this);
		((RadioButton) findViewById(R.id.radio_more))
				.setOnCheckedChangeListener(this);
	}

	private void setupIntents() {
		((RadioButton) findViewById(R.id.radio_home)).setChecked(true);
		mTabHost.addTab(buildTabSpec(HOME_TAB, mHomeIntent));
		mTabHost.addTab(buildTabSpec(MENTION_TAB, mMentionIntent));
		mTabHost.addTab(buildTabSpec(PERSON_TAB, mPersonIntent));
		mTabHost.addTab(buildTabSpec(MORE_TAB, mMoreIntent));
		mTabHost.setCurrentTabByTag(HOME_TAB);
	}

	private TabHost.TabSpec buildTabSpec(String tag, Intent intent) {
		TabHost.TabSpec tabSpec = mTabHost.newTabSpec(tag);
		tabSpec.setContent(intent).setIndicator("",
				getResources().getDrawable(R.drawable.icon));
		return tabSpec;
	}

	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
		if (isChecked) {
			switch (buttonView.getId()) {
			case R.id.radio_home:
				mTabHost.setCurrentTabByTag(HOME_TAB);
				break;
			case R.id.radio_mention:
				mTabHost.setCurrentTabByTag(MENTION_TAB);
				break;
			case R.id.radio_person_info:
				mTabHost.setCurrentTabByTag(PERSON_TAB);
				break;
			case R.id.radio_more:
				mTabHost.setCurrentTabByTag(MORE_TAB);
				break;
			default:
				break;
			}
		}
	}

	@Override
	public boolean dispatchKeyEvent(KeyEvent event) {
		if ((event.getAction() == KeyEvent.ACTION_DOWN)
				&& (event.getKeyCode() == KeyEvent.KEYCODE_BACK)) {
			quitDialog();
		}
		return super.dispatchKeyEvent(event);
	}

	private void quitDialog() {
		new AlertDialog.Builder(this)
				.setTitle(R.string.alerm_title)
				.setIcon(null)
				.setCancelable(false)
				.setMessage(R.string.alert_quit_confirm)
				.setPositiveButton(R.string.alert_yes_button,
						new DialogInterface.OnClickListener() {

							public void onClick(DialogInterface dialog,
									int which) {
								TiebaActivity.this.finish();
							}
						})
				.setNegativeButton(R.string.alert_no_button,
						new DialogInterface.OnClickListener() {

							public void onClick(DialogInterface dialog,
									int which) {
								dialog.dismiss();
							}
						}).create().show();
	}
}

3、中间加载进度条的实现

既然介绍了上边的标题栏,下边的标签栏,那么中间部分也得说一说,就以加载进度条为例,效果如下图所示:

“我的贴吧”按钮对应的activity是LikeActivity,它的布局文件如下。在FrameLayout中布局了ListView和ProgressBar,且ProgressBar位于ListView的上层。

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

    <ListView
        android:id="@+id/home_lv_forum"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/backgroundcolor"
        android:cacheColorHint="@color/backgroundcolor"
        android:divider="@drawable/list_divider"
        android:fadingEdge="none"
        android:listSelector="@drawable/list_selector" />

    <ProgressBar
        android:id="@+id/home_progress_like"
        style="?android:attr/progressBarStyleInverse"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:indeterminateDrawable="@drawable/progressbar"
        android:visibility="visible" />

</FrameLayout>

其中,android:indeterminateDrawable="@drawable/progressbar"用于指定进度条的显示的图片,progressbar.xml定义如下:

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/loading"
    android:pivotX="50.0%"
android:pivotY="50.0%" />

即实现图片loading围绕自身中心旋转的效果。loading图片如下图所示:


框架源码下载地址:http://download.youkuaiyun.com/detail/ace1985/4472460


百度贴吧布局 模仿百度贴吧的布局,包括上下Tab,适合新手学习之用,gb编码 立即下载

相关推荐

Android仿百度贴吧APP源码

Android Android源码 贴吧 高仿的百度贴吧, 百度贴吧的高仿源码可以参考。

页面布局 so easy——Android开发常见的界面布局方式详解

​在Android应用中,界面由布局和控件组成。布局好比是建筑里的框架,控件相当于建筑里的砖瓦。针对界面中控件不同的排列位置,Android定义了相应的布局进行管理。本篇将针对Android界面中常见的布局进行详细地讲解。

m0_70748458的博客 2060

让我们一起来做最漂亮的Android界面吧!

:如何为Android设备量身定制以打造出最为完美的应用?这是让诸多开发者很是头疼的问题。不同于iOS,Android设备品类众多,屏幕分辨率、动态缩放、字体等各有不同。美国自学成才的UI/UX设计师MengTo结合自己所学及实战演练对Android应用设计进行了各方位的深入剖析。与苹果的iOS家族相比,Android家族显然要大得多,但俗语有言“林子大了什么鸟都有”,Android设备品类繁多,界面不甚协调,再加上其一贯的自由开放作风,直接导致了应用极度缺乏统一性。Android自身的开放性极大的推动了应用的自主性,但对于开发者而言,在应用开发过程中,大到界面设计,小到屏幕分辨率、动态缩放及

Android Tangram模型:手把手带你学习淘宝、天猫都在用的UI框架模型,带你彻底弄明白

TangramNativeiOSAndroid就像使用七巧板 通过现有板块 快速拼凑出 多样的形状一样。

2401_84149635的博客 1266

Android仿百度贴吧TAB选项卡菜单和悬浮式顶部效果

MyTitleBar源代码,在Android定义Tab选项卡,实现了仿百度贴吧中的悬浮顶部和底部的标题栏效果,项目中含:源码+效果图+项目结构图,很不错的Android界面设计效果,代码中ISIBLE:0的意思是可见的;INVISIBILITY:4 意思是不可见的,但还占着原来的空间;GONE:8 意思是不可见的,不占用原来的布局空间。另外源码中还定义了许多功能实用的类和页面,比如:   MentionActivity.java 提醒Activity页面   MainActivity.java 主Activity程序入口类,在此定义了Tab选项卡标示符,单选按钮对象,消息提示文本对象,T

从零到一:手把手教你用DaVinci Configurator配置一个完整的AUTOSAR接口通信实例

本文详细介绍了如何使用DaVinci Configurator工具配置AUTOSAR接口通信实例,从环境准备到SWC端口定义、BSW模块配置,再到通信验证的全过程。通过实战案例'车窗控制'功能模块,帮助开发者快速掌握AUTOSAR架构下的接口通信配置技巧,提升汽车电子软件开发效率。

weixin_42557830的博客 450

Android 主流通用常用框架汇总(持续更新)

SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。它继承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的,其他第三方的。还集成了各种炫酷的 Header 和 Footer。

2301_82241647的博客 3386

HomeAssistant+HACS实战:5分钟搞定米家设备接入(附HomeKit配置技巧)

本文详细介绍了如何通过HomeAssistant和HACS插件商店快速接入米家设备,并分享HomeKit配置技巧。从HACS安装到米家设备接入,再到HomeKit设备集成,提供一站式智能家居解决方案,帮助用户实现设备统一管理和自动化场景设置。

weixin_29192141的博客 1048

Android项目—帖话APP

项目介绍 贴话APP实现的功能类似于百度贴吧,实现发帖,读帖,修改帖,删帖功能, 项目特色在于借助个人服务器的数据库实现网络服务,利用本地LitaPal实现用户数据缓存。 没有唯一用户的说法,使用人可以以任何用户名发帖,他人发帖可以看到。 实现了NavigationView侧边栏功能和WebView个人博客,上传图片的功能,支持用户登录,头像上传和帖子图片上传。 设计使用高德地图开发包实现地图功能。 使用CardView美化RecylerView,支持ToolBar和Scrolling美化页面动画。 项

qq_45769678的博客 4232

自动驾驶仿真(二)—— 基于PreScan与Simulink的联合仿真

自动驾驶仿真软件介绍二—— PreScan与Simulink联合仿真1. Prescan仿真软件2. Prescan与Simulink联合仿真2. 1 Prescan和matlab软件安装2. 2 联合仿真配置3. 联合仿真实例3.1 一辆不按法规行驶的小车3.2 另一辆的正常行驶的小车3.3 视觉辅助摄像机3.4 传感器检测4. 系列学习视频教程5. 参考学习的书目教材 上一篇博文简单介绍了Carsim与Simulink联合仿真,接着这篇就再继续简单介绍另一款自动驾驶仿真软件Prescan,并且简单做个P

zhudj08的博客 1万+

广告推荐算法 - 学习笔记(持续更新中)

本篇博客,是我用来记录学习广告推荐算法的一些笔记和总结。王喆:"深度"学习计算广告计算广告系统的核心目标是通过数据、算法和技术,在合适的场景下,将最相关的广告精准推送给目标用户,同时实现广告主媒体平台和用户之间的多方利益最大化。广告主:需求方核心目标:通过精准投放广告,最大化转化(如点击、购买)并控制成本,提升投资回报率(ROI)。关键行为:广告创建,定向设置,预算与出价策略,效果监控媒体平台:供给方核心目标:最大化广告收入,同时保持用户体验以避免用户流失。

qq_39748832的博客 2196

Android 学习:布局方式

Android 学习:布局方式 1、线性布局 线性布局: 控件从左到右排列:水平方式 控件从上到下排列:垂直方式 标签:LinearLayout 1.语法格式 <LinearLayoutear xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_conten..

weixin_52021660的博客 4455

【DRAM存储器六十八】DDR5介绍--DQS Interval Oscillator—动态时序校准利器

DDR5内存采用DQS间隔振荡器(DQSIntervalOscillator)技术应对高速数据传输中的时序漂移问题。该技术通过测量DQS信号在可编程时间窗口内的振荡次数(16位计数值),动态监测温度/电压变化导致的DQS-DQ延迟偏移。控制器通过MPC命令启停振荡器,读取MR46/MR47寄存器获取计数值,并与基准值对比来调整DQS相位,确保数据采样窗口始终处于最佳位置。该机制使DDR5在8400MT/s高速率下仍能保持数据可靠性,有效补偿±0.48tCK的时序偏移。

highman110的博客 149

TiebaTS模块:重塑你的百度贴吧个性化体验

厌倦了百度贴吧中无处不在的广告和冗余功能?TiebaTS模块正是为你量身打造的个性化解决方案。这款基于Xposed框架的开源项目,通过深度定制帮你解锁纯净、高效的贴吧浏览体验,让你的贴吧使用体验焕然一新。 ## 🎯 项目概览:你的个性化贴吧助手 TiebaTS模块是一个专为百度贴吧设计的Xposed增强模块,旨在通过智能Hook技术重塑贴吧的用户体验。不同于传统的贴吧客户端,TiebaTS让

gitblog_00381的博客 803

“双系统”出炉!瑞芯微RK3562J非对称AMP:Linux+RTOS/裸机

执行如下命令运行Linux应用程序rpmsg_echo,发送8个rpmsg数据包至运行Baremetal程序的Cortex-M0核心,当Cortex-M0核心每收到1个rpmsg数据包就会将数据包发送回Linux端。开发者可灵活分配任务或指定核心间通信,从而增强系统稳定性,减少崩溃风险,保障数据完整。下文以Cortex-A53(CPU0、CPU1、CPU2、CPU3)核心运行Linux系统与rpmsg_echo应用程序,Cortex-M0(MCU)核心运行Baremetal程序为例进行演示。

创龙,嵌入式一体化解决方案商 467

“华为杯“第十四届中国研究生数学建模竞赛-E题:多波次导弹发射中的规划问题(续)(附MATLAB代码实现)

将最长暴露时间的发射装置按照“优先隐蔽于转载地”,即增加该种发射装置的隐蔽时长,从而达到缩短最长暴露时间的目的。8.2 模型建立。

getusushu的博客 298

如何打造纯净高效的百度贴吧个性化体验?

厌倦了百度贴吧中无处不在的广告干扰和繁琐操作?TiebaTS为你带来全新的**百度贴吧个性化体验**解决方案!这款基于Xposed框架的模块,通过深度定制让贴吧回归简洁本质,同时增添实用功能,让浏览体验更加流畅自然。 ## 为什么你需要贴吧个性化改造?🤔 你是否曾为这些问题困扰: - 首页充斥着不感兴趣的推荐内容 - 底部导航栏布局不符合使用习惯 - 频繁的小红点通知干扰注意力 - 无法批量

gitblog_00708的博客 720

SAC-IA算法点云粗配准

SAC-IA(Sample Consensus Initial Alignment)是PCL库中的一种初始点云配准算法,它使用特征匹配和RANSAC(随机抽样一致性)框架来估计两个点云之间的初始刚性变换。其目标是通过特征描述符找到一组可靠的匹配点对,并使用这些点对估计初始对齐的变换矩阵。

twnkie的博客 1445

如何用TiebaTS模块实现百度贴吧的终极个性化体验:完整指南

你是否厌倦了百度贴吧中无处不在的广告推送和干扰性内容?TiebaTS是一款基于Xposed框架的开源模块,专门为追求纯净、高效贴吧浏览体验的用户设计。这个项目通过深度定制和功能扩展,让你的百度贴吧使用体验焕然一新,实现真正的个性化控制。 ## 贴吧用户的真实痛点:为什么你需要TiebaTS 大多数百度贴吧用户都面临相似的困扰: 1. **界面杂乱** - 广告、推荐内容和无关元素充斥屏幕 2

gitblog_00266的博客 964

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android app开发学习笔记——布局框架

Android app开发学习笔记——四大布局一、LinearLayout(线性布局)1.设置排列方式2.android:layout_gravity(对齐方式)3. weight(权重)二、RelativeLayout(相对布局)属性值为true或false属性值为id的引用名“@id/id-name”属性为具体的值三、框架布局四、约束布局1.为什么要用ConstraintLayout(约束布局)2.添加权重控制比例2.当相对布局用3.当百分比布局用五、动态添加布局 一、LinearLayout(线性布局

for_none的博客 1586

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android 常用开发框架

Android 常用开发框架

我的专栏 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

android的自动布局框架,Android ConstraintLayout 构建自适应界面

使用 ConstraintLayout 构建自适应界面ConstraintLayout 可让您使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局。它与 RelativeLayout 相似,其中所有的视图均根据同级视图与父布局之间的关系进行布局,但其灵活性要高于 RelativeLayout,并且更易于与 Android Studio 的布局编辑器配合使用。本文展示约束条件中的几种用法。约束条件...

weixin_39722188的博客 472

Android常用高质量框架

网络 Retrofit适用于Android和Java的类型安全的HTTP客户端(API)。 OkHttp 针对Java和Kotlin精心打造的HTTP客户端(API)。 VolleyVolley是一个HTTP库,可以使Android应用程序的联网更加轻松,它可以更快地联网(文章)。 AsyncHttpClient该框架已过时()。 图片 RX系列 RxBinding 响应式事件处理框架(文章)。 UI 其他 ......

qq_32922545的博客 7302

【Android基础入门No.1】Android中的几个布局

Android的五大布局分别是: LinearLayout(线性布局) FrameLayout(单帧布局) RelativeLayout(相对布局) AbsoluteLayout(绝对布局) TableLayout(表格布局) 接下来详细讲解每个布局 1、LinearLayout   LinearLayout...

weixin_33712987的博客 170

android 界面组件库,Android用户界面设计:框架布局

框架布局是将控件组织在Android程序的用户界面中最简单的布局类型之一。理解布局对于良好的Android程序设计来说是非常重要的。在这个教程里,你将学到所以关于框架布局的知识,它们主要用来在屏幕上组织特别的或重叠的视图控件。使用得当的话,很多有趣的Android程序用户界面都可以基于框架布局来设计。什么是框架布局框架布局是Android开发者组织视图控件最简单和最有效的布局之一。它们使用得比其它...

weixin_31487917的博客 385
上一篇: Android自定义状态栏通知(Status Notification)的正确实现
下一篇: Android中HandlerThread类的解析
ACE1985
博客等级 码龄17年 1307粉丝 308原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值