Android

一、开发环境的搭建

平台架构:Linux Kernel、Libraries、Application Framework、Applications。

Java环境、安装AndroidStudio、创建AVD(Android虚拟设备)
https://developer.android.google.cn/studio/index.html 需要科学上网。

项目结构:
manifests 是程序总配置文件
java 中是各种java代码,一个activity就是一个页面
res 中是各种资源。

二、UI

1、UI组件结构

所有UI组件都成为View,一般分为:用于显示数据的组件;用于容纳组件的组件。

2、数据单位

px 像素 对应屏幕上的实际像素点;
in 英寸 屏幕物理长度单位;
mm 毫米 屏幕物理长度单位;
pt 磅 屏幕物理长度单位;
dp 与密度无关的像素 逻辑长度单位,在160dpi屏幕上,1dp=1px=1/160英寸。随着密度变化,对应的像素数量也变化,但并没有直接的变化比例;
dip 与dp相同,多用于Google示例;
sp 与密度和字体缩放度无关的像素,与dp类似,但是可以根据用户的字体大小首选项进行缩放。

3、布局

布局为UI提供了一个可视化的结构,比如:在XML中声明UI元素;在运行时实例化布局元素。

线性布局(Linear Layout),按照水平或垂直的方向布局
相对布局(RelativeLayout),相对其他组件的布局方式
layout_above将该控件的底部置于给定ID的控件之上
layout_below将该控件的顶部置于给定ID的控件之下
layout_toLeftOf将该控件的右边缘和给定ID的控件左边缘对齐
layout_toRightOf将该控件的左边缘和给定ID的控件右边缘对齐
layout_alignBaseline将该控件的底部边缘和给定ID的控件底部边缘对齐
layout_alignLeft将该控件的左边缘和给定ID的控件左边缘对齐
layout_alignRight将该控件的右边缘和给定ID的控件右边缘对齐
layout_alignTop将该控件的顶部边缘和给定ID的控件顶部边缘对齐
​​
表格布局(TableLayout),按行列布局
帧布局(FrameLayout),组件从屏幕的左上角坐标布局组件。添加的每个子空间都被放在布局的左上角,并覆盖在前一子控件的上层。不能为子元素指定位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把他们部分或全部挡住(除非后一个子元素透明)
绝对布局(AbsoluteLayout),绝对布局,已被废弃
网格布局(GridLayout),相比LinearLayout布局的优点:可以同时在XY轴方向上进行对齐;可以多层布局嵌套;稳定的支持一些支持自由编辑布局的工具

三、组件

https://developer.android.google.cn/reference API参考文档

1、Toast

显示文本:提示信息——当用户执行某个操作后,自动显示,过一会儿自动消失。
Toast.makeText(context, 显示的内容, 时间的长短).show()  context可以是Activity的实例或者使用getApplicationContext()得到。时间长短为:Toast.LENGTH_LONG Toast.LENGTH_SHORT
显示图片:
Toast t = new Toast(this); 
ImageView imageView = new ImageView(this);
imageView.setImageResource(R.drawable.photo4);
t.setView(imageView);
t.show();

可以加上t.setText("")进行图文显示。

2、TextView

向用户显示文本和选择性地允许编辑他。一个TextView是一个完整的文本编辑器,但是基本的类配置为不允许编辑;参考EditText配置文本试图编辑的一个子类。允许用户复制TextView价值的部分或全部粘贴在其他地方,设置XML属性android:textIsSelectable为true或者调用setTextIsSelectable(true)。
常见属性查询API文档。

3、EditText

public class EditText extends TextView
是一个非常重要的组件,可以说它是用户和Android应用进行数据传输的窗户,有了它就等于有了一扇和Android应用传输的门,通过它用户恶意爸数据传给Android应用,然后得到我们想要的数据。
EditText是TextView的子类,所以TextView的方法和特性同样存在于EditText中。
输入变化事件:addTextChangedListener(TextWatcher)
监听回车键:setOnEditorActionListener
选取文本:Editable editable = editText.getText();    Selection.setSelection(editable,1, editable.length());

4、Button

public class Button extends TextView
代表一个按钮部件,可以按下按钮,或点击,由用户来执行一个动作。
OnClickListener事件,实现View.OnClickListener接口;使用内部类;自定义方法,配置adnroid: onclick属性。
配置透明的Button:style="?android:attr/borderlessButtonStyle"
配置style:Android:background
使用XML的drawable selector

ImageButton:显示一个按钮和一个图像,可以按下或由用户点击。默认情况下,一个ImageButton看上去就像一个普通的按钮,与标准按钮背景颜色变化在不同按钮的状态。表面的按钮上的图像通过android:定义XML元素的src属性或setImageResource(int)方法。删除标准按钮背景图像,定义您自己的背景图像或设置背景颜色是透明的。显示不同的按钮状态(专注、选择等),可以定义不同的形象状态。

5、ImageView

public class ImageView extends View
显示一个任意的图像,比如一个图标。ImageView类可以加载图像从不同来源,负责计算图像的测量,这样就可以用于任何布局管理器,并提供各种显示选项(缩放,着色)
android:src:设置View的drawable(图片或者颜色,但是需要指定View的大小
android:adjustViewBounds:是否保持宽高比。需要与MaxWidth、MaxHeight一起用。
android:maxHeight:设置View的最大高度,单独使用无效。
示例:设置图片固定大小,并保持图片宽高比:
设置setAdjustViewBounds=true;
设置maxWidth、MaxHeight;
设置layout_width和layout_height=wrap_content;
android:maxWidth:设置View最大宽度。

scaleType属性:
android:scaleType设置图片的填充方式。值:
matrix 用矩阵来绘制,动态缩小放大图片来显示
fitXY 把图片不按比例扩大/缩小到View的大小显示
fitStart 把图片按比例扩大/缩小至View的宽度,显示在View的上部分位置
fitCenter 把图片按比例扩大/缩小至View的宽度,居中显示
fitEnd 把图片按比例扩大/缩小至View的宽度,显示在View的下部分位置
center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
centerCrop 按比例扩大图片的size居中显示,使得图片长/宽等于或大于View的长/宽
centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使图片长/宽等于或小于View 的长/宽
android:tint 将图片渲染成指定颜色

6、CheckBox

public class CheckBox extends CompoundButton
复选框允许用户选择一个或多个选项从一组选项中。通常情况下,应该垂直列出表中的每个选项。
final CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id);
if (checkBox.isChecked()){    checkBox.setChecked(false);}

需要实现(implements)CompoundButton.OnCheckedChangeListener接口。
一组复选框允许用户选择多个项目,每个复选框是分开管理的,必须为每个复选框注册监听事件。
即onClick属性。

7、RadioButton

单选按钮允许用户从一组选项中选择一个。
创建每个单选按钮选项,创建一个RadioButton在你的布局。然而,由于单选按钮是相互排斥的,必须使用RadioGroup将他们分组。
触发事件:onRadioButtonClicked

8、ToggleButton

一个切换按钮允许用户改变两国之间的设置。
你可以添加一个基本的开关按钮布局与toggleButton对象。
ToggleButton和开关控制的子类CompoundButton和功能以同样的方式,这样你就可以实现他们的行为一样。
使用CompoundButton.OnCheckedChangeListener.

switch为新增的开关按钮。

9、RatingBar

基于SeekBar和ProgressBar的扩展,用星级来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,有两种央视(小风格ratingBarStyleSmall,大风歌ratingBarStyleIndicator),大的适合指示,不适用于用户交互。
当使用可以支持用户交互的RatingBar时,无论将控件(widgets)放在左边还是右边都不合适。只有当布局的宽被设置为wrap_content时,设置的星星数量(setNumStars(int)或者在XML的布局文件中定义)将显示出来。
事件处理:RatingBar.OnRatingBarChangeListener。回调函数,星级进度改变时修改客户端的星级。
XML属性中android:isIndicator,表示RatingBar是否是一个指示器(是否可以更改)
android:numStars星星数量。
android:rating默认评分,必须是浮点类型
android:stepSize评分的步长,也必须是浮点类型。

10、Spinner

提供一个快速的方法从一组选择一个值。默认状态下显示当前选择的值,触摸显示下拉列表。
通过创建数组适配器来控制下拉列表。
适配器构造方法有两种:(上下文,下拉列表里的布局,显示的组件ID,数据)/(上下文,数据,布局)
通过adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)设置每个下拉选项的视图
通过spinner.setAdapter(adapter)添加适配器

11、AutoCompleteTextView

如果想为用户提供建议类型,可以使用EditText的子类AutoCompleteTextView。为了实现自动完成,必须制定一个(@link android.widget.Adapter)提供建议的文本。有几个可用的适配器类型,根据数据来自哪里。

12、ProgressBar

进度条
java.lang.Object
android.view.View
android.widget.ProgerssBar
在某些操作的进度中的可视显示器,为用户呈现操作的进度,还有一个次要的进度条,用来显示中间的进度,比如流媒体播放的缓冲区速度。一个进度条也可以不确定进度。不确定模式下显示循环动画。通常用于任务长度未知。进度条即一个表示运转的过程。
展示方式有两种:表盘形式,条形填充形式。
重要属性:max(最大值)、progress(当前进度值)、secondaryProgress(第二条进度值)、progressBarStyle(默认样式)、progressBarStyleHorizontal(水平)
重要方法:getMax() 返回范围上限;getProgress() 返回当前进度值;getSecondaryProgress() 返回次要进度值,incrementProgressBy(in diff) 指定增加的进度,即步长;isIndeterminate() 指示进度是否在不确定模式下;setIndeterminate(boolean indeterminate) 设置不确定模式;setVisibility(int v) 设置是否可视

对话框进度条
ProgressDialog

标题进度条
在setContentView方法之前设置:requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
然后使用setProgressBarIndeterminateVisibility(true);显示标题进度条

自定义进度条
在res/drawable/下创建一个layer-list,设置ProgressBar的android:indeterminateDrawable属性

13、AlertDialog

对话框(Dialog)。
需求背景:在Android界面弹出对话框,询问用户或让用户选择。
AlertDialog.Builder builder = new AlertDialog.Builder(this);
setTitle("提示");    setMessage("内容");    setIcon(R.mipmap.ic_lanuncher);    builder.show();生效
// 正面的按钮
builder.setPositiveButton("是", new DialogInterface.OnClickListener(){ @Override onClick事件});
// 反面按钮
builder.setNegativeButton();
// 中立按钮
builder.setNeuteralButton()

列表对话框
setItems(items, new DialogInterface.OnClickListener(){    });设置多个选项。

多选列表对话框
setMultiChoiceItems(items, boolean[] checkItems, new DialogInterface.OnMultiChoiceClickListener(){    });

多项单选列表对话框 
setSingleChoice(items, int checkedItem, new DialogInterface.OnClickListener(){    })

自定义对话框
嵌套一个新的布局:setView(R.layout.layout_name);(android5.0之后支持)
需要实例化布局文件:final View view = getLayoutInflater().inflate(R.layout.login_layout, null);

14、TimePickerDialog

需要继承DialogFragment,实现TimePickerDialog.OnTimeSetListener接口。重写onCreateDialog方法,返回一个TimePickerDialog对象。

15、DatePickerDialog

时间选择对话框。创建类继承DialogFragment。重写onCreateDialog()方法,返回一个TimePickerDialog对象。实现DatePickerDialog的OnDateSetListener接口来接受一个回调,设置日期。

16、TimePicker

时间控件

17、DatePicker

日期控件

四、高级组件

1、GridView

用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字、图片或其他元素)需要显示时,可以使用该组件。

numColumns="auto_fit"  GridView的列数设置为自动
columnWidth="90dp"  每列的宽度,也就是Item的宽度
stretMode="columnWidth"  缩放于列宽大小同步
verticalSpacing="10dp"  两行之间的边距
horizontalSpacing="10dp"  两列之间的边距

自定义适配器:
创建一个类,继承BaseAdapter类
实现四个方法:
getCount()获取要显示的选项总数
getItem()获取每一个选项
getItemId()获取选项ID
getView()该方法用来为每一个选项生成视图(ImageView等),会被多次调用。

图文排列
需要一个新建布局将图文合并,然后实例化布局得到一个view再放入GridView。

2、ListView

列表视图以垂直列表的凡事列出需要显示的列表项。

常用XML属性
cacheColorHint="#00000000"  设置拖动背景色为透明
dividerHeight="30px"  listview的item之间的高度
divider="@drawable/ic_launcher"  listview的item之间的北京或者说是颜色
fadingEdge="vertical"  上边和下边有黑色的阴阳,值为none的话就没有阴影
drawSelecotOnTop="false"  点击某条记录不妨,颜色会在记录的后面,成为背景色
scrollbars="horizontal | none"  只有值为horizontal|vertical的时候,才会显示滚动条,并且会自动隐藏和显示
fastScrollEnabled="true"  快速滚动效果,配置这个属性,在快速滚动的时候旁边会出现一个小方块的快速滚动效果,自动显示和隐藏
listSelector="@color/pink"  listView的item选中时的颜色
entries="@array/citys"  设置列表填充的内容

ListActivity
public class ListActivity extends Activity
提供了一个列表项的视图来显示数据,可以绑定指定的数据源,比如数据或数据库游标,给用户提供一种选项选择。
布局默认是由一个单一的在屏幕中心的全屏幕的列表,用setcontentview()在oncreate()设置您自己的自定义屏幕布局视图布局,必须包含一个列表视图的对象ID:"@android:id/list"
可选:您的自定义视图可以包含任何类型,显示另一个视图对象列表视图是空的,必须包含一个视图对象的ID:android:id/empty
onListItemClick是事件处理。

单选和多选模式
单选:ArrayAdapter<String> aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, arr);
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);  lv.setAdapter(aa);
多选:ArrayAdapter<String> aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, arr);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);  lv.setAdapter(aa);

ListView实现图文列表
使用SimpleAdapter建立复杂的列表项:
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
运行环境,Map组成的List。在列表中的每个条目对应列表中的一行,每一个map中应该包含所有在from参数中指定的键,一个定义列表项的布局文件的资源ID。布局文件将至少应包含那些在to中定义的ID,一个将被添加到Map映射上的键名,将绑定数据的视图的ID。跟from参数对应。这些应该全是TextView
使用BaseAdapter实现更灵活的列表:
实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类。依然需要实现四个方法。
优化:
使用ListView的宽高固定,避免内容变化导致ListView重新渲染;重复使用convertView;使用ViewHolder提高在容器中查找组件的效率(用于保存第一查找的组件,避免下次重复查找)。

ListView刷新分页
当前Activity implements OnScrollListener
实现接口的方法
listView注册滚动监听
Adapter中添加增加数据的函数
获得2页以后的数据后,adapter增加数据,并刷新。notifyDataSetChanged();

3、ExpandableListView

一个视图显示垂直滚动两集列表中的条目。不同于列表,允许两个层次:组织单独可以扩展为显示其子项。
比如在手机设置中,对于分类有很好的效果。

整体思路:
要给ExpandableListView设置适配器,那么必须先设置数据源。
数据源,就是此处的适配器类ExpandableAdapter,此方法继承了BaseExpandableListAdapter,它是ExpandableListView的一个子类。需要重写多个方法。
数据源中用到了自定义的View布局,此时根据需求,来设置组和子项的布局样式。getChildView()和getGroupView()方法设置自定义布局。
数据源设置好,直接给ExpandableListView.setAdapter()即可实现收缩功能。

4、ImageSwitcher TextSwitcher

是Android中控制图片展示效果的一个控件,如幻灯片效果。粗略理解就是ImageView的选择器。
原理:ImageSwitcher有两个子View:ImageView,当左右滑动的时候,就在这两个ImageView之间来回切换以显示图片。
创建ImageSwitcher是通过工厂实现的:ViewFactory。(implements ViewSwitcher.ViewFactory)重写其makeVIew方法。
本身还需要implements View.OnTouchListener,重写onTouch方法(触屏事件)。

TextSwitcher与ImageSwitcher一样。

5、ViewFlipper

屏幕切换指的是在同一个Activity内屏幕间的切换,最常见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。
ViewFlipper extends ViewAnimator
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.FrameLayout
android.widget.ViewAnimator
android.widget.ViewFlipper
简单的ViewANimator之间,两个或两个以上的view加上动画效果
一个时间只有一个子组件
如果需要,每个自组件能自动翻转之间在固定的时间间隔
该类继承了Framelayout类,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。
和动画相关的函数:
setInAnimation:设置View进入屏幕时候使用的动画,有两个版本,一个接受单个参数(android.view.animation.Animation),另一个接受两个参数(Context, int)分别为Context对象和定义Animation的resourceID。
setOutAnimation:设置View退出屏幕时候使用的动画,参数同上
showNext:调用该函数来显示FrameLayout里面的下一个View
showPrevious:调用该函数来显示FrameLayout里面的上一个View

定义四个动画:
in_leftright.xml左到右进入屏幕、out_leftright.xml左到右退出屏幕、in_rightleft.xml右到左进入屏幕、out_rightleft.xml右到左退出屏幕。直接在res中添加目录存放。其中使用translate(移动)控件,需要的属性为:xmlns:android="http://schemas.android.com/apk/res/android"、android:duration="3000"(时间)、android:fromXDelta="-100%p"(从哪儿)、android:toXDelta="0"(到哪儿)。

6、Menu

Options menu and action bar
选项菜单,创建步骤:覆盖Activity的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用;调用Menu的add()方法添加菜单项(MenuItem),同时可以调用MenuItem的setIcon()方法来为菜单项设置图标;当菜单项(MenuItem)被选择时,覆盖Activity的onOptionsItemSelected(MenuItem item)来响应事件。

可以直接代码设置菜单项,也可以直接通过xml布局文件(配置文件)设置。

Context menu
上下文菜单,与上下文环境有关。思想类似于Windows中的右键单击弹出的快捷菜单。操作时要长时间按住某个控件不放。创建步骤:覆盖Activity的onCreateContextMenu(Menu menu)方法,调用Menu的add()方法添加菜单项;覆盖Activity的onContextItemSelected(MenuItem item)来响应事件;调用registerForContextMenu()方法来为视图注册上下文菜单。

Popup menu
弹出式菜单,是停靠在一个View上的一个模式菜单。如果View对象下方有空间,那么弹出菜单将显示在停靠对象的下方,否则会显示在上方。在API级别11和更高版本上才有效。

7、ViewPager

是谷歌官方提供的一个兼容低版本安卓设备的软件包,里面包含了安卓3.0以上可以使用的api。而Viewpager就是其中之一。从简单的导航到页面菜单等一应俱全。使用时需要PagerAdapter适配器。

使用ViewPager实现页面切换
ViewPager可以使视图滑动,分三个步骤:在布局文件中加入一些配置;加载要显示的页卡;在Activity里实例化ViewPager组件,并设置他的Adapter(就是PagerADapter,方法与ListView一样的)。
实现一个PagerAdapter,覆盖以下方法:
instantiateItem(ViewGroup, int) 实例化页卡
destroyItem(ViewGroup, int, Object) 删除页卡
getCount() 返回页卡数量
isViewFromObject(View, Objcet) 判断两个对象是否相等
getPageTitle(int position) 设置标签显示的标题
设置指示标签的属性
pagerTabStrip.setTabIndicatorColor() 指示器的颜色
pagerTabStrip.setBackgroudColor() 背影色
pagerTabStrip.setTextColor(Color.WHITE) 字体颜色

//需要加入的配置<android.support.v4.view.ViewPagerandroid:id="@+id/viewpager"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"> <android.support.v4.view.PagerTabStripandroid:id="@+id/pagertab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="top" />   </android.support.v4.view.ViewPager>
/***注意:*这里ViewPager和PagerTabStrip都要吧包名写全,不然会ClassNotFound*API中:在布局xml吧PagerTabStrip当作ViewPager的一个子标签来用,不能拿出来,否则会报错*在PagerTabStrip标签中可以用属性android:layout_gravity=TOP|BOTTOM来指定title的位置*如果要显示出PagerTabStrip某一页的title,需要在ViewPager的adapter中实现getPageTitle(int) *方法。*///加载页卡
LayoutInflater lf = getLayoutInflater().from(this)
view1 = lf.inflate(R.layout.layout1, null)
view2 = lf.inflate(R.layout.layout2, null)
view3 = lf.inflate(R.layout.layout3, null)
viweList = new ArrayList<View>();
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);

程序首次启动的引导页实现

8、PopupWindow

Android的对话框有两种:PopupWindow和AlertDialog。它们的不同点在于:AlertDialog的位置固定,而PopupWindow的位置可以随意。按照位置有无偏移氛围偏移和无偏移;按照参照物的不同,可以分为相对于某个控件和相对于父控件。
showAsDropDown(View anchor) 相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor, int xoff, int yoff) 相对某个空间的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y) 相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移。

创建PopupWindow
contentView 指定PopupWindow的内容;width指定PopupWindow的width;height指定PopupWindow的height;
PopupWindow mPopupWindow = new PopupWindow(popupWindow, ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
设置相关属性:
mPopupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_black));
mPopupWindow.getBackgound().setAlpha(100);
mPopupWindow.setAnimationStyle(R.style.popwin_anim_style); 设置动画效果
设置点击窗口外边窗口消失
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setFocusable(true);
mPopupWindow.setTouchable(true);
防止虚拟软键盘被弹出菜单遮住
mPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
显示和关闭PopupWindow
显示弹窗:
mPopupWindow.showAsDropDown(v); 相对某个控件的位置(正左下方),无偏移
mPopupWindow.showAsDropDown(v, 50, 50); xy方向各偏移50
mPopupWindow.showAtLocation(v, Gravity.CENTER, 0, 0);  相对于父控件的位置,无偏移
mPopupWindow.showAtLoaction(v, Gravity.BOTTON, 0, 50; 相对于父控件的位置,有偏移
关闭弹窗:
mPopupWindow.dismiss()
获取设备屏幕尺寸
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
mScreenHeight = dm.heightPixels;
mScreenWidth = dm.widthPixels;

9、Notification

实在你的应用常规界面之外展示的消息。当app让系统发送一个消息的时候,消息首先以图标的形式显示在通知栏。要查看消息的详情需要进入通知抽屉(notificationdrawer)中查看。通知栏和通知抽屉都是系统层面控制的,可以随时查看,不限制于app。

Notification作为UI中很重要的组成部分,拥有自己专属的设计准则。
有两种显示方式,取决于android版本以及notification drawer的状态:
普通视图:是标准显示方式
notification最高64dp,即使创建了宽视图风格的,在未展开的情况下也是以普通大小显示出来。由:标题、大图标、通知内容、通知数据、小图标、发布时间组成。可以调用setWhen()设置一个明确的时间。默认是系统收到通知的时间。
宽式图:指你的notification被展开时会显示更大的视图,这种风格是android4.1之后才有的新特性。
只有当notification被展开的时候这种宽视图的才会出现,通过手势操作可以展开一个普通的notification(如果能展开的话)。这种风格的notification从android4.1后才开始支持。只比普通视图多了 详情区域 。
宽视图氛围:大图标风格(详情区显示一个最高256dp的bitmap)、文字风格(详情区显示一段文字)、消息盒子风格(显示几行文字)。

创建Notification
将notification的一些UI信息以及相关动作赋予NotificationCompat.Builder对象,然后通过NotificationCompat.Builder.build()来获得notification对象自己;然后调用NotificationManager.notify()向系统转交这个通知。一个对象需要包含如下内容:小图标(setSmallIcon()获取)标题(setContentTitle()获取)详情文字(setContentText()获取)除此之外,其余内容可选。
要活的一个能展开的宽视图掩饰的通知首先创建一个普通的builder对象,然后调用Builder.setStyle()。

管理Notifications
当需要多次发出通知对于相同类型的时间,你应该避免使一个全新的通知。相反,应该考虑更新之前的通知,通过改变它的一些值或者通过添加,或者两者都有。
通过调用NotificationManager.notify(ID, notification)时所使用的ID来更新它。为了更新你之前发布的通知,需要更新或者创建一个NotificationCompat.Builder对象,从之前的通知中创建一个Notification对象,然后发布它使用你之前使用的ID。如果之前的通知仍然可见,系统将直接更新通知的内容,如果不可见,一条新的通知将被创建。
通知会一直存在,直到:用户手动一条一条清除通知,或者使用清除所有;用户点击通知,且创建这条通知时使用了setAutoCancle();为一个指定ID的通知调用了cancel();调用了cancelAll()方法。

动作与行为(可选)
至少添加一种行为:允许用户通过点击notification进入一个activity中进行更多的查看或者后续操作。一个通知可以提供多种动作,而且也应该让用户点击一个通知之后总能有相应的相应动作,通常是打开一个activity。还可以在通知中添加能响应点击事件的button。
在通知内部,一个动作本身是被定义在一个PendingIntent中,PendingIntent包含了一个用于启动app中activity的intent。要将PendingIntent和一个手势联系起来,需要调用合适的NotificationCompat.Builder方法。比如你想在点击notification文字的时候启动activity,你需要调用NotificationCompat.Builder的setContentIntent()来添加PendingIntent。启动一个activity是notification动作响应中最普遍的一类。

显示进度通知
通知可以包含一个动态的进度指示器,用来显示当前操作的进度。如果你能估计这个操作总共有多久,以及任何时间点上的完成度,那么你可以用一个“确定”格式的指示器(进度条)。如果没法估计操作的长度,用“不确定”格式的指示器。进度条指示器是实现了ProgressBar来执行显示的。调用setProgress()方法来使用进度条指示器开始于Android4.0。在之前的版本,你必须创建自己的通知布局来包含ProgressBar视图。
显示一个已知长度的进度条指示器:通过调用setProgress() setProgerss(max, progress, false)给你的通知加上进度条。然后发布通知。然后随着操作的进度,增加进度值,然后更新通知。操作结束的时候,进度值应该等于最大值。通常的方式是调用setProgress()来设置最大值为100,然后增加进度完成的百分比。
可以在操作完成的时候显示进度条,也可以移除掉。这样的情况下,需要更新通知的文本,显示操作已经完成。调用setProgress(0,0,false)来移除进度条。
显示一个持续的活动指示器:使用setProgress(0,0,true)方法来给你的通知添加不确定的活动指示器,然后发布通知。除非指定动画效果,否则指示器的样式都一样。
操作开始的时候发布通知,这个动画将一直执行,直到你修改通知,操作完成的时候,调用setProgress(0,0,false)来更新通知区一处活动指示器。除非想让操作完成时动画效果还在继续。当操作完成时更新通知里的文本。

自定义通知视图
通过RemoteViews对象来定义通知的外观。与常规通知相似,但是基于定义在XML文件的RemoteViews对象来操作的。
自定义通知的可用高度是取决于通知视图的。正常的视图布局高度限制在64dp,可展开视图的布局高度限制在256dp。
为了定义自己的通知布局,从扩充XML文件获取一个RemoteViews对象的实例开始。然后类似于调用setContentTitle()方法一样。我们需要调用setContent()。为了能设置更多细节,使用RemoteViews对象的方法来设置更多内容。
创建一个单独的XML文件,用来定义通知的布局,可以使用任何想用的名字,但后缀必须是.xml;在应用中,使用RemoteViews对象的方法来给你的通知设置文本和图标,通过diaoyongsetContent()把你的RemoteViews对象放到NotificationCompat.Builder里面。避免使用背景图像,因为文本会受影响。
RemoteViews对象页包含一些方法来给你添加Chronometer和ProgressBar。
注意:使用自定义的通知条时,特别要注意你自定义的通知条在不同方向与分辨率的设备上是如何工作的。不要吧通知条做的太复杂,确保它的灵活性。

为自定义的通知文本使用样式资源:自定义通知条总是使用样式资源定义文本。通知的背景颜色会变得与设备当前版本的android有很大的反差。使用样式文本能很好的解决。
注意:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件和AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件,不支持这些类的子类或Android提供的其他控件,否则会引起ClassNotFoundException一场。带按钮的布局相应点击事件在3.0以下版本不起作用。

10、样式和主题

样式

是给View或Window指定外观和格式的属性集合。样式能够指定高、边距、字体颜色、字体尺寸、背景颜色等属性。样式被定义在一个与布局xml文件分开的xml资源文件中。Android中的样式与web设计中的层叠式样式表类似,允许与内容分开设置。
使用掩饰属性:style="@style/CodeFont"

定义样式要创建一个样式集,就要把一个XML文件保存在项目目录中的res/values目录中。XML文件的名字是随意的。但必须用.xml扩展名,并且保存在res/values文件夹中,根结点必须是<resources>
对于要创建的每个样式,都要在这个XML文件中添加一个<style>元素,并用name属性唯一的标识这个样式,然后给样式的每个属性添加一个<item>元素,这个元素的name属性用于声明样式的属性名,属性值被放在一组<item>之间。给<item>元素的值能够是字符串、十六进制颜色、另一个资源类型的引用、依赖样式属性的其他值。
<resources>元素的每个子元素在编译时都要被转换成一个应用程序资源对象,通过<style>元素的name属性值来引用。<style>元素中的parent属性是可选的,它指定了另一个样式的资源ID,当前样式可以继承这个指定样式的属性,然后如果需要,可以覆写被继承的样式属性。把XML中定义的一个样式用作一个Activity或应用程序的主题与给一个View对象定义样式完全相同。

样式继承性
<style>元素中的parent属性可以继承一个既存的样式属性,然后只定义需要改变和添加的属性。你能够继承自己定义的样式,也可以继承平台内置的样式。如果想要继承自己定义的样式,就不必使用parent属性,但是要把想要继承的样式名做新样式名的前缀。

主题

是应用于整个Activity或应用程序的样式,而不是一个独立的View对象。当一个样式被用作主题时,Activity或应用程序中的每个View对象都会使用它所支持的每个样式属性。

11、自定义组件

用于构建更复杂的UI视图

自定义组件的三种方式:
组合现有的Android默认提供的组件:继承ViewGroup或其子类Layout类等布局类进行组合;
调整现有Android默认提供的组件:继承View的子类具体类;
完全自定义组件:继承View基类,里面界面及事件完全由自己控制。

实现自定义组件
配合XML属性资源文件方式:
第一步:attrs.xml文件。首先写出自定义组件的类文件,然后将这个类里需要外界传入值的属性定义成一个属性资源文件。在工程里的../res/values/目录下创建一个attrs.xml文件。

//attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="MyView"><attr name="textColor" format="color"></attr><attr name="textSize" format="dimension"></attr><attr name="text" format="string"></attr></declare-styleable>
</resources>

其中attr子元素:
定义具体的属性,format表示这个属性的值的类型,类型如下:
reserence:参考指定Theme中资源ID,这个类型的意思就是你传的值可以使引用资源
string:字符串,如果想可以直接写也可以用"@string/test"应用资源的方式,可以写成format="string|reference"
Color:颜色
boolean:
dimension:尺寸值
float
integer
fraction:百分数
enum:枚举
flag:位或运算

declare-styleable子元素
定义一个styleable对象,每个styleable对象就是一组attr属性的集合,注意这里的name属性并不是一定要和自定义雷鸣相同,只是为了好区分对应类的属性而已
上面的属性资源文件定义了该属性之后,到底是那个自定义View组件中来使用的属性,属性到底能发挥什么作用,就不归属性资源文件关了。属性资源所定义的属性到底可以返回什么作用,取决于自定义组件的代码实现。

第二步:在自定义类里引用attrs文件里定义的属性为自己的属性设置值

第三步:使用自定义组件,并设置属性

ScrollView嵌套ListView、GridView的冲突

重写onMeasure方法达到使ListView适应ScrollView的效果。

    @Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {heightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, heightMeasureSpec);}

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. JavaWeb中Servlet下载

    Servlet文件下载,刚学完分享自己的学习感受 #文件下载的七步曲 1.要获取下载文件的路径 已知自己需要的下载代码路径String realPath = "xxx"; 2.下载的文件名是什么String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);//截取路径到“…...

    2024/4/24 10:50:04
  2. redis(1)

    1.redis一个key存储的对应的数据不会超过512M...

    2024/4/28 3:01:19
  3. 微人事-首页完善

    1)重复添加路由的问题解决方案:重写路由的Push方法 添加图下代码 import Router from vue-routerconst routerPush = Router.prototype.push Router.prototype.push = function push(location) {return routerPush.call(this, location).catch(error=> error) }2)添加面包…...

    2024/4/24 10:50:08
  4. Linux管理开放端口与防火墙笔记总结

    引言 在工作中,如果不是用的云服务器,没有用户安全组规则的设置与修改,直接在Linux宿主机上操作,其实也算简单,但需要注意到的点就可能比较多,另外检测也都有相应的方法,所以想总结一下之前有遇到过的问题。 防火墙与开放端口 首先防火墙分为包过滤防火墙(pack filterin…...

    2024/4/24 10:50:08
  5. AQS深入理解系列(二) 独占锁的释放过程

    前言 在上一篇文章AQS深入理解 独占锁的获取过程中,我们分析了独占锁的获取过程。相对于获取过程,独占锁的释放过程则相对简单了很多。 Lock lock = new ReentrantLock(); ... lock.lock(); try {// 搞事情 } finally {lock.unlock(); }对于ReentrantLock的使用,一定要注意将…...

    2024/4/24 10:50:00
  6. xUitls3框架的入门级使用及部分解析

    文章目录xUtils3入门使用及部分解析xUtils简介实操部分:搭建初始化环境1.Gradle构建时添加以下依赖:2.加入所需要的权限:3.进行初始化(记得是在application中进行初始化,这点与旧版不一致)4.在配置文件中进行引用:5.在MainActivity也要进行声明ViewUtils模块的使用@Cont…...

    2024/4/24 10:49:58
  7. kafka(2)

    文件存储机制消息确认几种方式,说白了就是改变offset的值1.自动提交,多久提交一次2.手动提交-- 手动同步提交-- 手动异步提交指定消费某个分区的消息消息的消费原理老版本的consumer offset是维护在zk上的(0.8之前)新版本consumer是存在kafka的内部的topic里面kafka的分区分配策…...

    2024/4/16 5:32:44
  8. 虚幻4第一章配置环境

    第一章安装 一账户注册 https://www.unrealengine.com/zh-CN/?sessionInvalidated=true 注册账户 第二选择创作许可三启动器四安装引擎重要的知识点 开发需要大量的模型,首先上场有免费板块。而且每个月会上线新的免费模型_.第二配置项目 一项目创建 1选择虚幻引擎 2选择库下…...

    2024/4/16 5:33:35
  9. 前端启动nodejs项目地址

    等价 多映射了一个可以访问真实网关服务的地址端口 8082, 即可以用8080 或者 8082 都是相当访问到8080 的! 注意: 真实的网关服务地址 设计的是 8080哈!!!...

    2024/4/20 14:20:33
  10. ES6中的常用异步对象和函数

    1.promise对象// promise对象 const promise=new Promise((resolve,reject)=>{console.log(1);resolve();console.log(2); }) promise.then(()=>{console.log(3); }) console.log(4);//打印的结果:1,2,4,3const promise=Promise.resolve(1).then(2).then(Promise.resolv…...

    2024/4/25 12:04:11
  11. 【B - LIS & LCS】

    题意:东东有两个序列A和B。 他想要知道序列A的LIS和序列AB的LCS的长度。 注意,LIS为严格递增的,即a1<a2<…<ak(ai<=1,000,000,000)。思路:求LIS(最长上升子序列),使用两个for循环,一个用来遍历序列中的所有元素,一个用来遍历序列中这个元素之前的所有元素…...

    2024/4/16 5:32:34
  12. Java基础(一)

    Java语言的发展史 创始人:James Gosling 市面上用的最多的版本:Java8.0 (2014年) 长期支持版本:Java12 Java语言的跨平台性 JDK(Java Developer’s Kit)=JRE(java Runtime Environment)+开发工具 JRE=JVM(java Virtual Machine)+核心类库 java程序在不同平台(操作系统)上运行需…...

    2024/4/25 19:09:56
  13. 关于PyCharm的安装、激活、环境配置以及导入第三方包中遇到的一些问题

    安装PyCharm的过程 首先,在这安装过程中,推荐下载最新的2019版本使用,不建议用汉化版,用英文版对以后的学习会有更大益处。安装包用户可以自行在搜索引擎上下载,不过建议去官网下载使用。 下载之后根据提示安装即可。 激活PyCharm的过程 激活PyCharm的方式有三种,我这里使…...

    2024/4/18 6:43:07
  14. 删除某些路径下的某些文件夹(使用cmd中for语句)

    在一次写一个负责更新的软件中,遇到要将更新时临时使用的文件夹,删除掉的功能。于是有了下面的探究。 更新软件的实现思路:这是一个只有简单逻辑的软件,只是负责从云端检测是否有新的更新包,然后反馈给主程序,接着下载更新包并解压到windows系统的用户临时目录下,再然后…...

    2024/4/19 13:40:29
  15. windows安装elasticsearch 7.4和head控制台就、ik

    文章目录1. elasticsearch下载2. elasticsearch安装3. 安装中文分词器ik4. elasticsearch-head控制台安装5. head控制台的简单使用 1. elasticsearch下载推荐下载 7.4.0版本,目前最新7.7.0版本,因为最新版本的中文分词器ik在github上找不到现成可用的。建议直接从官网下载。也…...

    2024/4/24 10:50:00
  16. HDU 1002 A+B Problem II (大数相加,手算模拟)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1002 题目大意: 有T组数据,每一组数据有两个数字a和b,求a+b。数字特别大,不超过1000位。 输出的注意一下,是每组之间有一个空行,而不是每一组后面跟一个空格。 思路: 就是大数相加,所谓大数相加就是模拟人手算的过…...

    2024/4/24 10:50:04
  17. MyBatis源码-深入理解MyBatis Executor的设计理念

    文章目录Pre回顾JDBC的执行过程Pre 如果MyBatis的基础用法还不熟悉,31篇入门博客送给您 https://blog.csdn.net/yangshangwei/category_7205317.html回顾JDBC的执行过程...

    2024/4/24 10:49:55
  18. Element ui 使用小细节

    <el-form ref="form" :model="form" label-width="120px" label-position="top"><el-form-item label="活动时间" class="p_binglijia_date"><el-col :span="8"><el-date-picker…...

    2024/4/24 10:49:54
  19. Apache的管理及优化web(2) ---Apache的虚拟主机 、Apache的语言支持(PHP、cgi)、Apache的加密访问、Squid+Apache (squid 正向代理、反向代理)

    一、Apache的虚拟主机 1.虚拟主机虚拟主机(Virtual Host),又称虚拟服务器、主机空间或是网页空间,是一种网络技术,可以让多个主机名称,在一个单一的服务器上运作,而且可以分开支持每个单一的主机名称。虚拟主机可以运行多个网站或服务。虚拟并非指不存在,而是指空间是由…...

    2024/4/26 11:52:32
  20. Leecode108_sorttedArrayToBST

    Leecode 108 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 方法一: 递归法,每次选择中间作为root,类似于二分法。树类的算法大多可以用递归解决。 代码:TreeN…...

    2024/4/24 10:50:00

最新文章

  1. 什么是外汇杠杆交易?

    外汇杠杆交易是目前的外汇交易市场中&#xff0c;投资者进行外汇交易的重要方式&#xff0c;通过这样的交易方式&#xff0c;投资者就有机会进行以小搏大的交易&#xff0c;他们的交易就有可能会更成功&#xff0c;因此&#xff0c;投资者应该对这样的交易方式进行了解&#xf…...

    2024/4/28 3:16:33
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Oracle备份和还原的几种方式

    1、使用数据泵方式 exp demo/demoorcl buffer1024 filed&#xff1a;\back.dmp fully demo&#xff1a;用户名、密码 buffer: 缓存大小 file: 具体的备份文件地址 full: 是否导出全部文件 ignore: 忽略错误&#xff0c;如果表已经存在&#xff0c;则也是覆盖 exp demo/de…...

    2024/4/23 6:25:47
  4. MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用

    数据结构 我们知道MySQL的存储引擎Innodb默认底层是使用B树的变种来存储数据的 下面我们来复习一下B树存储 B树存储 哈希存储的区别 哈希存储,只能使用等值查询 B树与B树存储 我们知道B树实际上就是B树的变种 那么为啥使用B树而不是使用B树呢? 我们知道效率的高低主要取决于…...

    2024/4/23 6:22:51
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57