当前位置: 首页 > news >正文

Android的组件、布局学习

介绍

公司组织架构调整,项目组需要承接其他项目组的android项目,负责维护和开发新需求,故学习下基础语法和项目开发。

组件学习

Toolbar=header布局部分

就是app最顶部的部分

他的显示与否,是与F:\androidProject\android_learn\demo1\app\src\main\res\values\styles.xml这个文件相关的。

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style></resources>

与DarkActionBar这个属性相关,默认就是自带的,如果想要取消,可以设置NoActionBar来解决

parent="Theme.AppCompat.Light.NoActionBar">

设置之后的效果

我们不要android自带的ToolBar,我们可以自己用androidx写一个,为什么要替换,可以更加灵活的去修改。

<androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar1"app:navigationIcon="@drawable/ic_arrow_back_black_24dp"android:layout_width="match_parent"android:background="#ffff00"app:title="标题"app:titleMarginStart="90dp"app:subtitle="子标题"app:subtitleTextColor="#00ffff"app:logo="@drawable/ic_android_black_24dp"android:layout_height="?attr/actionBarSize"/>

效果如下:

给要点击的返回按钮添加事件:

Toolbar toolbar1 = findViewById(R.id.toolbar1);
toolbar1.setNavigationOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View view) {Log.e("pshdhx","返回按钮被点击了");}
});

 如何让toolbar的标题居中?

<androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar2"app:navigationIcon="@drawable/ic_arrow_back_black_24dp"android:layout_width="match_parent"android:background="#ffff00"app:subtitleTextColor="#00ffff"app:logo="@drawable/ic_android_black_24dp"android:layout_height="?attr/actionBarSize"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:layout_gravity="center"android:text="标题"/>
</androidx.appcompat.widget.Toolbar>

使用这个属性即可,但是android studio没有提示。android:layout_gravity="center"

AlertDialog=alert+confirm

//相当于web中的Confirm或者是alert
public void putDialogAlert(View view) {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.mipmap.ic_launcher).setTitle("alert对话框").setMessage("你确定要xxx吗").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Log.e("pansd","onClick点击了确定");}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Log.e("pansd","onClick点击了取消");}}).setNeutralButton("中间", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Log.e("pansd","onClick点击了中间");}}).create().show();
}

 效果如下:

设置布局

View dialog_view = getLayoutInflater().inflate(R.layout.dialog_view,null);
xxx.setView(dialog_view);

新的布局文件

<?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="wrap_content"android:background="#00ff00"android:orientation="horizontal"><ImageViewandroid:src="@mipmap/ic_launcher"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:text="Android"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>

 添加布局后的对话框,组件里边嵌入了一个layout

popupWindow=dialog

相当于一个Dialog,显示在界面的正上方

<?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:background="@mipmap/ic_launcher"android:orientation="vertical"><Buttonandroid:id="@+id/shanghai"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="上海"android:textSize="18dp"/><Buttonandroid:id="@+id/beijing"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="北京"android:textSize="18dp"/></LinearLayout>

 

public void putpopupWindow(View view) {View popupView = getLayoutInflater().inflate(R.layout.popup_view, null);PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);popupWindow.showAsDropDown(view,10,10);
}

点击按钮显示,点击空白处小时,相当于一个Dialog弹窗。

给弹窗设置背景色

 

//给弹窗设置背景色
popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.cat));

点击弹窗里边的按钮,并且点击之后,让popupWindow退出

View beijingBtn = popupView.findViewById(R.id.beijing);
beijingBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Log.e("pansd","点击了popupWindow中北京的按钮");popupWindow.dismiss();}
});

 

布局

LinearLayout

android:gravity="center_horizontal|bottom"

子组件,水平方向上,居中,然后放置到bottom底侧

android:layout_gravity="center" 如果父组件是vertical,那么该子组件只能控制水平方向的这一块内容。

设置元素之间的分割线:

android:divider="@drawable/divider" 设置分割线的图片 【可以直接使用linearlayout 高度=1dp来设置分割线】

android:showDividers="middle" 在中间显示分割线

android:dividerPadding="100dp" 设置分割线和左右边框的距离

android:layout_weight="1" 该组件把剩余的空间分配,如果别的也是1,那么各分50%的剩余空间。但是,如果出现了match_parent的情况,权重需要根据实际情况计算。所以,权重设置的时候,直接设置高度为0即可按照比例分割。

RelativeLayout

相对布局,一定需要定位。要不然,都上下层贴到一块了。

FrameLayout

从父容器的左上角开始布局,每次都绘制在当前图层的上一层。

 

还有一个属性:

android:foreground="@drawable/ceshi1"

android:foregroundGravity="right|bottom"

设置当前图层的前景色,就是图层的上边,添加一张图片,放置在右下角。

TableLayout

如果在该布局下,直接写组件,那么写的组件会占用一整行。两个组件就是占用两行。

如果要仅仅使用一行呢,需要使用<TableRow>

如果一行超过了屏幕的显示范围,那么不显示。

 

不能把两行进行一个合并,只能把两列进行一个合并。

GridLayout

 

ConstraintLayout

就是新建项目时的默认的布局,在Design中拖动组件的圆点布局。

 

http://www.lryc.cn/news/263457.html

相关文章:

  • 【离散数学】——期末刷题题库(树其一)
  • 光模块市场分析与发展趋势预测
  • Python轴承故障诊断 (八)基于EMD-CNN-GRU并行模型的故障分类
  • 鸿蒙实现年月日十分选择框,支持年月日、月日、日、年月日时分、时分切换
  • IntelliJ IDE 插件开发 | (三)消息通知与事件监听
  • VUE小知识点
  • 深入了解常见的应用层网络协议
  • 网络爬虫 多任务采集
  • 真实并发编程问题-1.钉钉面试题
  • 基于vue+element-plus+echarts制作动态绘图页面(柱状图,饼图和折线图)
  • 2312llvm,02前端
  • 【MATLAB源码-第101期】基于matlab的蝙蝠优化算BA)机器人栅格路径规划,输出做短路径图和适应度曲线。
  • 【数据结构】二叉树的模拟实现
  • open3d bug:pcd转txt前后位姿发生改变
  • 持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用
  • OpenAI 疑似正在进行 GPT-4.5 灰度测试!
  • DC-6靶场
  • 单片机应用实例:LED显示电脑电子钟
  • 会议剪影 | 思腾合力受邀出席首届CCF数字医学学术年会
  • node.js mongoose中间件(middleware)
  • [Toolschain cpp ros cmakelist python vscode] 记录写每次项目重复的设置和配置 不断更新
  • 【每日OJ—有效的括号(栈)】
  • .gitignore和git lfs学习
  • 2023-12-18 C语言实现一个最简陋的B-Tree
  • vite与webpack?
  • 距离矩阵路径优化Python Dijkstra(迪杰斯特拉)算法和冲突驱动子句学习
  • Selenium安装WebDriver:ChromeDriver与谷歌浏览器版本快速匹配_最新版120
  • 系统架构设计师教程(七)系统架构设计基础知识
  • Bifrost 中间件 X-Requested-With 系统身份认证绕过漏洞复现
  • OpenSSL 3.2.0新增Argon2支持——防GPU暴力攻击