
通知栏显示所用到的布局文件content_viewxml
主运行类:
package yyytestandroid4;
import javautilTimer;
import javautilTimerTask;
import androidappActivity;
import androidappAlertDialogBuilder;
import androidappNotification;
import androidappNotificationManager;
import androidappPendingIntent;
import androidcontentDialogInterface;
import androidcontentIntent;
import androidcontentpmPackageManagerNameNotFoundException;
import androidosBundle;
import androidosHandler;
import androidosMessage;
import androidviewView;
import androidviewViewOnClickListener;
import androidwidgetButton;
import androidwidgetRemoteViews;
import androidwidgetToast;
public class TestAndroid4Activity extends Activity {
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
superhandleMessage(msg);
switch (msgwhat) {
case 0:
notifcontentViewsetTextViewText(Ridcontent_view_text1, len+"%");
notifcontentViewsetProgressBar(Ridcontent_view_progress, 100, len, false);
managernotify(0, notif);
break;
case 1:
ToastmakeText(TestAndroid4Activitythis, "下载完成", 0)show();
break;
default:
break;
}
}
};
private Button update,cancel;
private int localVersion,serverVersion;
private int len;
private NotificationManager manager;
private Notification notif;
/ Called when the activity is first created /
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutmain);
update = (Button) findViewById(Ridupdate);
updatesetOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//点击通知栏后打开的activity
Intent intent = new Intent(TestAndroid4Activitythis,OtherActivityclass);
PendingIntent pIntent = PendingIntentgetActivity(TestAndroid4Activitythis, 0, intent, 0);
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notif = new Notification();
notificon = Rdrawablelogo;
notiftickerText = "新通知";
//通知栏显示所用到的布局文件
notifcontentView = new RemoteViews(getPackageName(), Rlayoutcontent_view);
notifcontentIntent = pIntent;
managernotify(0, notif);
new DownLoadThread()start();
}
});
}
}
private class DownLoadThread extends Thread{
private Timer timer = new Timer();
@Override
public void run() {
// TODO Auto-generated method stub
superrun();
timerschedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message msg = new Message();
msgwhat = 0;
msgobj = len;
handlersendMessage(msg);
if(len == 100){
timercancel();
handlersendEmptyMessage(1);
}
}
}, 0, 1000);
len = 0;
try {
while(len < 100){
len++;
Threadsleep(1000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
}
一、activity
1一个activity就是一个类,继承activity;
2需要复写onCreate()方法;
3每一个activity都需要在AndroidMainfestxml清单上进行配置;
4为activity添加必要的控件。
二、布局
线性布局:LinearLayout
1填满父空间:fill_parent、match_parent
2文本多大空间就有多大:warp_content
3文字对齐方式:gravity
4占屏幕的比例:layout_weight="1" 水平方向,则width=0,垂直方向,则height=0
5一行显示,空间不够会省略:singleLine="ture" false会换行
6背景:background="#ffffff"
7水平布局:orientation="horizontal"
垂直布局:orientation="vertivcal"
表格布局:TableLayout
1内边距:padding
2外边距:marginLeft\Start、Right\End、Top、Bottom
三、RelativeLayout相对布局
layout_above 将该控件的底部置于给定ID控件之上
layout_below 将该控件的顶部置于给定ID控件之下
layout_toLeftOf 将该控件的右边缘和给定ID控件的左边缘对齐
layout_toRightOf 将该控件的左边缘和给定ID控件的右边缘对齐
layout_alignBaseline 该控件的baseline和给定ID的控件的Baseline对齐
layout_alignBottom 该控件的底部边缘和给定ID的控件的底部边缘对齐
layout_alignLeft 该控件的左边缘和给定ID的控件的左边缘对齐
layout_alignRight 该控件的右边缘和给定ID的控件的右边缘对齐
layout_alignTop 该控件的顶部边缘和给定ID的控件的顶部边缘对齐
layout_alignparentBottom 如果该值为true,则该控件的底部和父控件的底部对齐layout_alignParentLeft 如果该值为true,则该控件的左边和父控件的左边对齐
layout_alignParentRight 如果该值为true,则该控件的右边和父控件的右边对齐
layout_alignParentTop 如果该值为true,则该控件的上边和父控件的上边对齐
layout_centerHorizontal 如果该值为true,则该控件将被置于水平方向的中央
layout_centerInParent 如果该值为true,则该控件将被置于父控件水平和垂直方向的中央
layout_centerVertival 如果该值为true,则该控件将被置于垂直方向的中央
四、一个Intent对象包含一组信息
1Component name
2Action
3Data
4Category
5Extras
6Flags
Intent intent = new Intent(this, SecondActivityclass);
startActivity(intent); //startActivity方法
intentputExtra("Key", "Value"); //键值对
intent = getIntent();
String value = intentgetStringExtra("Key"); //通过键提取数据
五、初级控件:EditText、TextView、Button
1获取EditText的值
String value = EditTextgetText()toString();
2将值放到Intent对象中
Intent intent = new Intent();
intentputExtra("one",value )
intentsetCalss(Activitythis, OtherActivityclass);
3使用这个Intent对象来启动Otheractivity
ActivitythisstartActivity(intent);
4将监听器的对象绑定到按钮对象上
buttonsetOnclickListener(new Listener());
5得到Intent对象当中的值
Intent intent = getIntent();
String value1 = intentgetStringExtra("one");
int value2 = IntegerparseInt(value);
六、其他初级控件使用
①ImageView
②RadioGroup和RadioButton
setOnCheckedChangeListener(new RadioGroupOnCheckedChangeListener())
③Checkbox
setOnCheckedChangeListener(new CompoundButtonOnCheckedChangeListener())
④Menu
1当客户点击MENU按钮的时候,调用onCreateOptionMenu()方法
public boolean onCreateOptionMenu(Menu menu){
menuadd(0,1,1,Rstringid);
}
2当客户点击MENU内部的具体某一个选项时,调用onOptionItemSelected()方法
public boolean onOptionItemSelected(MenuItem item){
if(itemgetItemId() == 1){
finish();
}
return superonOptionItemSelected(item);
}
七、Activity的生命周期
1第一次创建时调用
protected void onCreat(Bundle saveInstanceState);
2显示出来时调用
protected void onStrat();
3获得用户焦点时调用(可 *** 作)
protected void onResume();
4点击d出第二个Activity时调用
protected void onPause();
5当第一个Activity不可见时调用
protected void onStop();
6当返回第一个Activity时调用,代替OnCreate,因为没被销毁
protected void onRestart();
7当返回第一个Activity时调用(先执行onStop,在执行,因为第二个Activity被销毁,不能返回获取,只能通过onCreat,onStart,onResume再创建)
protected void onDestory();
八、Task
1Task是存放Activity的Stack栈。当点击启动第二个Activiry时,第一个Activtiy会被压入Stack栈当中,第二个Activity会位于栈的顶部;当返回第一个Activtiy时,第二个Activity会被d出Stack,第一个Activity会位于栈的顶部,以此类推。
注释:当调用finish()时,当前的Activity会被Destory掉,栈中的Activity会消失。
2当Activity都从Stack退出后,则就不存在Task。
九、高级控件
①进度条ProgressBar
水平进度条style="android:attr/progressBarStyleHorizontal"
圆圈进度条style="android:attr/progressBarStyle"
用户可视的visibility="gone"
②列表ListView
十、其他控件
A下拉菜单Spinner
1创建一个ArrayAdapter:
ArrayAdapter<CharSequence> adapter = ArrayAdaptercreateFromResource(
this, //指上下文对象
Rarrayplant_array, //引用了在文件中定义的String数组
androidRlayoutsimple_spinner_item);//用来指定Spinner的样式,可替换自定义
adaptersetDropDownViewResource(
androidRlayoutsimple_spinner_dropdown_item);//设置Spinner当中每个条目的样式
2得到Spinner对象,并设置数据:
spinner=(spinner)findViewById(RidspinnerId);
spinnersetAdapter(adapter);
spinnersetPrompt("测试");//标题
3创建监听器
class SpinnerOnSelectListener implements OnItemSelectedListener{
@override
public void onItemSelected(
AdapterView<> adapterView,//整个列表对象
View view,//被选中的具体条目对象
int position,//位置
long id){ //id
String selected = adapterViewgetItemAtPosition(position)toString();
}
@override
public void onNothingSelected(AdapterView<> adapterView){
Sop("nothingSelected");
}
}
4绑定监听器
spinnersetOnItemSelectedListener(new SpinnerOnSelectListener());
注:第二种动态设计
1创建ArrayList对象
List<String> list = new ArrayList<String>();
listadd("test1");
2 调用方法
ArrayAdapter adapter = new ArrayAdapter(
this, //指上下文对象
Rlayoutitem, //引用了指定了下拉菜单的自定义布局文件
RidtextViewId,//id
list);//数据
3得到Spinner对象,并设置对象
spinnersetAdapter(adapter);
spinnersetPrompt("测试");//标题
3创建监听器
class SpinnerOnSelectListener implements OnItemSelectedListener{
@override
public void onItemSelected(
AdapterView<> adapterView,//整个列表对象
View view,//被选中的具体条目对象
int position,//位置
long id){ //id
String selected = adapterViewgetItemAtPosition(position)toString();
}
@override
public void onNothingSelected(AdapterView<> adapterView){
Sop("nothingSelected");
}
}
4绑定监听器
spinnersetOnItemSelectedListener(new SpinnerOnSelectListener());
BDatePicker和DatePickerDialog
1声明一个监听器,使用匿名内部类
DatePickerDialogOnDateSetListener onDateSetListener
= new DatePivkerDialogOnDateSetListener(){
public void onDateSet(
DatePicker view,
int year,
int monthOfYear,
int dayOfMonth){
Sop(year+"-"+motnOfYear+"-"+dayOfMonth)
}
}
2复写onCreateDialog(int id)方法:
@override
protected Dialog onCreateDialog(int id){
switch(id){
case DATE_PICKER_ID:
return new DatePickerDialog(this,onDateSetListener,2019,11,25);
}
return null;
}
3使用时调用showDialog()方法
showDialog(DATE_PICKER_ID);
CAutoCompleteTextView
BWidget
CAnimatin
十一、实现ContentProvider过程
1定义一个CONTENT_URI常量
2定义一个类,继承ContentProvider
3实现query、insert、update、delete、getType和onCreate方法
4在AndroidManifestxml当中进行声明
//变量:
private SeekBar seekbar;
private MediaPlayer player = null;
player = new MediaPlayer();//初始化
seekbarsetMax(playergetDuration());//设进度条显示
//音量:
audioManager=(AudioManager)getSystemService(AUDIO_SERVICE);
int MaxSound=audioManagergetStreamMaxVolume(AudioManagerSTREAM_MUSIC);
maxVolumeTextViewsetText(StringvalueOf(MaxSound));
SoundseekBarsetMax(MaxSound);
int currentSount=audioManagergetStreamVolume(AudioManagerSTREAM_MUSIC);
SoundseekBarsetProgress(currentSount);
SoundseekBarsetOnSeekBarChangeListener(new SeekBarListener());
ProceseekBar2setOnSeekBarChangeListener(new ProcessBarListener());
主Activity:----------
import javautilArrayList;
import javautilList;
import androidappActivity;
import androidosBundle;
import androidwidgetListView;
public class MainActivity extends Activity
{
private ListView listView;
private DownloadAdapter adapter;
private List<String> lists = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
for (int i = 0; i < 10; i++)
{
listsadd("button" + i);
}
listView = (ListView) findViewById(RidlistView1);
adapter = new DownloadAdapter(this, lists);
listViewsetAdapter(adapter);
}
}
Adapter :
import javautilList;
import javautilconcurrentExecutorService;
import javautilconcurrentExecutors;
import androidcontentContext;
import androidosHandler;
import androidosMessage;
import androidviewLayoutInflater;
import androidviewView;
import androidviewViewGroup;
import androidviewViewOnClickListener;
import androidwidgetBaseAdapter;
import androidwidgetButton;
import androidwidgetProgressBar;
import androidwidgetTextView;
public class DownloadAdapter extends BaseAdapter
{
private Context context;
private List<String> list;
private LayoutInflater inflater;
private ExecutorService pool = ExecutorsnewFixedThreadPool(2);
public DownloadAdapter(Context context, List<String> list)
{
thiscontext = context;
thislist = list;
inflater = LayoutInflaterfrom(context);
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return listsize();
}
@Override
public Object getItem(int position)
{
// TODO Auto-generated method stub
return listget(position);
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return listget(position)hashCode();
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
MyHolder myHolder = null;
if (convertView == null)
{
convertView = inflaterinflate(Rlayoutitem, null);
myHolder = new MyHolder();
myHolderbar = (ProgressBar) convertView
findViewById(RidprogressBar1);
myHolderbutton = (Button) convertViewfindViewById(Ridbutton1);
myHoldertextView = (TextView) convertView
findViewById(RidtextView1);
convertViewsetTag(myHolder);
}
else
{
myHolder = (MyHolder) convertViewgetTag();
}
MyDownLoadThread down = new MyDownLoadThread(myHolderbar,
myHolderbutton, myHoldertextView, false);
myHolderbuttonsetOnClickListener(down);
return convertView;
}
class MyHolder
{
private ProgressBar bar;
private Button button;
private TextView textView;
}
public class MyDownLoadThread extends Thread implements OnClickListener
{
private ProgressBar pBar;
private Button btn;
private TextView textView;
private int index = 0;
private boolean isStart = false;
private Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
if (isStart)
{
pBarsetProgress(index);
textViewsetText(index + "%");
if (index == 100)
{
btnsetText("下载完成");
isStart = false;
}
}
}
};
public MyDownLoadThread(ProgressBar pBar, Button btn,
TextView textView, boolean b)
{
thispBar = pBar;
thisbtn = btn;
thistextView = textView;
isStart = true;
}
@Override
public void onClick(View v)
{
if (isStart)
{
isStart = true;
btnsetText("开始下载");
pBarsetMax(100);
poolexecute(this);
}
}
@Override
public void run()
{
while (index < 100)
{
index += 5;
if (isStart)
{
handlersendEmptyMessage(0);
}
try
{
sleep(1000);
}
catch (InterruptedException e)
{
eprintStackTrace();
}
}
}
}
}
activity_mainxml:
<xml version="10" encoding="utf-8">
<LinearLayout xmlns:android=">
TextView是最常用的组件之一用于显示文本
像这种需求通常是两个TextView组成的解决方案
用两个TextView 一个作为标题,一个作为动态内容
还是用一个TexeView 直接getText()toString() 得到文本再调用String的api split(":") 拆分,即通过:进行拆分
通常在android中都是用两个TextVew来处理的,前面一个TextVew作为标题,是固定不变的,后面一个TextVew作为变量,动态显示内容
获取textView文本的api :
String txt = textViewgetText()toString();
1文本框(TextView)和编辑框(EditText)
文本框(TextView)不允许用户编辑文本内容,而编辑框(EditText)允许用户编辑文本内容
2按钮(Button)和按钮(ImageButton)
Button显示文字,ImageButton显示。
为ImageButton指定android:text属性没用,不会显示文字
可以指定android:background为按钮增加背景,但这是固定的
可以指定android:src为按钮增加属性
其实,src才是设置图标,而background只是设置背景。
如果控件的大小是100 100 资源是80 80的话,那么用src,就会居中显示,如果使用background那么就会被拉伸充满控件。
重要的是,background是底层的资源,src是覆盖在background上面的资源,他们可以叠加使用,实现选中的效果。
3单选按钮(RadioButton)和复选框(CheckBox)
多了一个android:checked属性,用于指定初始时是否被选中
4计时器组件Chronometer用法
红色字体表示常用的方法
5图像视图(ImageView)
它支持属性android:scaleType setScaleType(ImageViewScaleType)
matrix(ImageViewScaleTypeMATRIX):使用matrix方式进行
fixXY(ImageViewScaleTypeFIX_XY):对横向纵向独立缩放,会改变纵横比
fitStart(ImageViewScaleTypeFIT_START):保持纵横比,较长的边长与ImageView相应的边长相等,缩放后放在左上角
fitCenter(ImageViewScaleTypeFIT_CENTER):保持纵横比,较长的边长与ImageView相应的边长相等,缩放后放在中央
fitEnd(ImageViewScaleTypeFIT_END):保持纵横比,较长的边长与ImageView相应的边长相等,缩放后放在右下角
center(ImageViewScaleTypeCENTER):放中间,不缩放
centerCrop(ImageViewScaleTypeCENTER_CROP):保持纵横比,使能完全覆盖ImageView
centerInside(ImageViewScaleTypeCENTER_INSIDE):保持纵横比,使ImageView能完全显示
6spinner的功能和用法
如果可以确定spinner里面的列表项,那么直接在/res/layout/mainxml里面指定
然后在/res/value/stringxml里面指定
如果不确定里面的列表项,那么必须要提供一个Adapter,这个Adapter负责决定Spinner列表每项的内容
7日期、时间选择器(DatePicker和TimePicker)
8自动完成文本框(AutoCompleteTextView)
比普通文本框多了一个功能:当用户输入一定字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单后,组件会按用户选择自动填写该文本框
使用该组件很简单,只要为它设置一个Adapter,该Adapter封装了AutoCompleteTextView预设的提示文本
9进度条(ProgressBar)
通过style属性可以为ProgressBar指定风格。该属性可以有如下的属性值:
1@android:style/WidgetProgressBarHorizontal 水平进度条
2@android:style/WidgetProgressBarInverse 不断跳跃、旋转画面的进度条
3@android:style/WidgetProgressBarLarge 大进度条
4@android:style/WidgetProgressBarLargeInverse不断跳跃、旋转画面的大进度条
5@android:style/WidgetProgressBarSmall 小进度条
6@android:style/WidgetProgressBarSmallInverse不断跳跃、旋转画面的小进度条
ProgressBar提供如下方法来 *** 作进度
1setProgress(int) 设置进度的完成百分比
2incrementProgressBy(int) 设置进度条的增加或减少。参数为正增加,参数为负减少
10选项卡(TabHost)
TabHost仅仅只是一个简单的容器,它提供如下方法
1newTabSpec(String tag) 创建选项卡
2addTab(TabHostTabSpec tabSpec) 添加选项卡
使用TabHost的一般步骤为:
• A 在界面中定义TabHost组件,并为该组件定义该选项卡的内容
• B Activity应该继承TabActivity
• C 调用TabActivity的getTabHost()来获取TabHost对象
• D 通过TabHost对象的方法来创建选项卡、添加选项卡
选项卡主要由TabHost、TabWidget、FrameLayout3个组件组成,三者缺一不可,想象一下选项卡的特点,多个卡重叠在一起,所以用FrameLayout即帧布局是必要的。另外需要注意的是TabHost、TabWidget、FrameLayout三个组件的android:id必须使用系统默认的名称,而不能自己随意定义,否则会出错。
11图像切换器(ImageSwitcher)
12网格视图(GridView)
使用GridView一般指定numColumn大于1,否则取默认值为1那么GridView就变成了ListView
属性android:stretchMode支持如下属性
1none 不拉伸
2spacingWidth 仅拉伸元素之间的间距
3spacingWidthUniform 表格、元素之间的间距一起拉伸
4columnWidth 仅拉伸表格
13画廊视图(Gallery)(现在已经被弃用了,不过还是列出来吧)
Gallery用法很简单——为它提供一个内容Adapter,该Adapter的getView方法所返回的View可作为Gallery的列表项。可以通过OnItemSelectedListener监听选择项的改变
14列表试图(ListView和ListActivity)
1创建ListView由两种方式:
2直接使用ListView进行创建
让Activity继承ListActivity(继承了ListActivity的类无需调用setContentView()来显示页面,可以直接设置适配器)
一旦获得ListView后,就要创建显示的列表项了。需要借助内容Adapter,内容Adapter负责提供需要显示的列表项
创建ArrayAdapter时必须指定一个textViewResourceId,该参数决定每个列表项的外观
1simple_list_item_1 每个列表项是普通的TextView
2simple_list_item_2 每个列表项是普通的TextView(字体略大)
3simple_list_item_checked 每个列表项是已勾选的列表项
4simple_list_item_multiple_choice 每个列表项是带多选框的文本
5simple_list_item_single_choice 每个列表项是带多单选按钮的文本
15使用AlertDialog
1创建AlertDialogBuilder对象,该对象是AlertDialog的创建器
2调用AlertDialogBuilder方法为对话框设置图标、标题等
3调用AlertDialogBuilder的create()方法创建AlertDialog对话框
4调用AlertDialog的show()方法显示对话框
16使用Toast显示提示框
步骤如下:
• 调用Toast构造器或makeText方法创建Toast对象
• 调用Toast方法来设置该消息的对齐方式等
• 调用Toast的show()方法显示出来
• Toast toast = ToastmakeText(ToastTestthis, "信息", ToastLENGTH_LONG)show();
17Notification(一般显示网络状态、电池状态、时间等)
使用Notification发送Notification步骤:
• 调用getSystemService(NOTIFICATION_SERVICE)方法获取系统的Notification Manager服务
• 通过构造器创建一个Notification对象
• 为Notification设置属性
• 通过Notification Manager发送Notification
以上就是关于谁知道怎样在安卓手机通知栏里显示下载进度条啊全部的内容,包括:谁知道怎样在安卓手机通知栏里显示下载进度条啊、Android基础知识、java编写的音乐播放器如何让进度条和音乐关联起来 点击进度条的指定位置 音乐就从指定位置开始播放等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)