Android开发百科全书①
Posted CodingForAndroid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发百科全书①相关的知识,希望对你有一定的参考价值。
友情提示根据目录 快速查找问题
%1$s %1$d android string
1、整型,比如“我今年23岁了”,这个23是整型的。在string.xml中可以这样写,<string name="old">我今年%1$d岁了</string> 在程序中,使用 [java] view plaincopy
- String sAgeFormat = getResources().getString(R.string.old);
- String sFinalAge = String.format(sAgeFormat, 23);
%1$d表达的意思是整个name=”old”中,第一个整型的替代。如果一个name中有两个需要替换的整型内容,则第二个写为:%2$d,以此类推;具体程序中替换见下面的string型;
2、string型,比如“我的名字叫李四,我来自首都北京”;这里的“李四”和“首都北京”都需要替换。 在string.xml中可以这样写,<string name="alert">我的名字叫%1$s,我来自%2$s</string> 在程序中: [java] view plaincopy
- view sourceprint?1 String sAgeFormatString sAgeFormat1= getResources().getString(R.string.alert);
- String sFinal1 = String.format(sAgeFormat1, "李四","首都北京");
<xliff:g>标签介绍:
属性id可以随便命名
属性值举例说明
%n$ms:代表输出的是字符串,n代表是第几个参数,设置m的值可以在输出之前放置空格
%n$md:代表输出的是整数,n代表是第几个参数,设置m的值可以在输出之前放置空格,也可以设为0m,在输出之前放置m个0
%n$mf:代表输出的是浮点数,n代表是第几个参数,设置m的值可以控制小数位数,如m=2.2时,输出格式为00.00
也可简单写成:
%d (表示整数)
%f (表示浮点数)
%s (表示字符串)
使用步骤举例:
1.
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
2.
<string name="test_xliff">小红今年<xliff:g id="xxx">%d</xliff:g>岁了,上<xliff:g id="yyy">%s</xliff:g>年级!</string>
3.
String test = String.format(getResources().getString(R.string.test_xliff), 7, "小学二");
输出:
小红今年7岁了,上小学二年级!
浏览器中 %3A 代表 : %2F 代表 /
http %3A %2F%2F images.%2F82005team-dcppg01shandianxiawulaibang.jpg
http://images/XXX.jpg
两个 安卓 原生的控件 效果也挺好看的
原生控件 swiperefreshlayout 和 progressbar
效果也不错
布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</ListView>
</android.support.v4.widget.SwipeRefreshLayout>
<ProgressBar
android:id="@+id/progressbar"
style="@android:style/Widget.ProgressBar"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerInParent="true"
android:indeterminate="false"
android:indeterminateDrawable="@drawable/loading"
android:padding="5dp"
android:visibility="invisible" />
</RelativeLayout>
loading.xml:
<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="1080.0" >
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="18"
android:useLevel="false" >
<gradient
android:centerColor="#FFDC35"
android:centerY="0.50"
android:endColor="#14CCB2"
android:startColor="#FFFFFF"
android:type="sweep"
android:useLevel="false" />
</shape>
</rotate>
代码:
public class MainActivity extends Activity implements OnRefreshListener
private SwipeRefreshLayout swipe;
private ProgressBar mProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mProgressBar = (ProgressBar) findViewById(R.id.progressbar);
swipe = (SwipeRefreshLayout) findViewById(R.id.swipe);
swipe.setOnRefreshListener(this);
// 顶部刷新的样式
swipe.setColorSchemeResources(android.R.color.holo_red_light,
android.R.color.holo_green_light,
android.R.color.holo_blue_bright,
android.R.color.holo_orange_light);
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
@Override
public void onRefresh()
mProgressBar.setVisibility(View.VISIBLE);
Timer timer = new Timer();
TimerTask task = new TimerTask()
@Override
public void run()
runOnUiThread(new Runnable()
@Override
public void run()
swipe.setRefreshing(false);
mProgressBar.setVisibility(View.INVISIBLE);
);
;
timer.schedule(task, 3000);
浸入状态栏
在 SetcontentView 前面 添加 两行代码,从 sdk 19 以后 才有的效果
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
setContentView(R.layout.activity_main);
LinearLayout ll=new LinearLayout(this);
代码中设置 TextView 的 drawableleft ,图片 与文字 之间的 间距问题
findViewById.setText("神");
findViewById.setGravity(Gravity.CENTER_VERTICAL);
//在左侧添加图片
Drawable drawable= getResources().getDrawable(R.drawable.ic_launcher);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
findViewById.setCompoundDrawables(drawable, null, null, null);
// textView.setTextColor(getResources().getColor(R.color.gray_textcolor_shen));
findViewById.setCompoundDrawablePadding(400);//设置图片和text之间的间距
findViewById.setPadding(-5, 0, 0, 0);
在同一进程的 两个activity 之间传递 bitmap
Intent intent=new Intent();
intent.putExtra("Bitmap", saveBitmap);
Bitmap bitmap = getIntent().getParcelableExtra("Bitmap");
保存bitmap 到本地
/**
* 保存bitmap 到本地
* @param path : 绝对路径
* @param bitmap:bitmap
*/
public static void saveBitmap(String path,Bitmap bitmap)
File f = new File(path + System.currentTimeMillis() + ".png");
try
f.createNewFile();
catch (IOException e)
LogUtils.d("在保存图片时出错:"+e.toString());
FileOutputStream fOut = null;
try
fOut = new FileOutputStream(f);
catch (FileNotFoundException e)
e.printStackTrace();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
try
fOut.flush();
catch (IOException e)
e.printStackTrace();
try
fOut.close();
catch (IOException e)
e.printStackTrace();
-----------------------------------------------------------------------------------------------------------------------
代码设置 样式
// 文字
TextView appNameText=new TextView(UIUtils.getContext());
appNameText.setTextAppearance(UIUtils.getContext(), R.style.ChannelTextStyle);
appNameText.setText(appInfo.title);
如何让Android下的多行EditText焦点光标默认在第一行 .
只要加上android:gravity="top"就搞定OK了。
在Android开发中如何移除EditText上的输入焦点 ?
当我们创建一个带EditText 或 AutoCompleteTextView的视图时,在加载视图时总是会把输入的焦点自动移动到第一个输入框。如何改成最终效果呢?且看本文详解。当我们创建一个带EditText 或 AutoCompleteTextView的视图时,在加载视图时总是会把输入的焦点自动移动到第一个输入框。如下图所示:
下面是mail.xml布局文件
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<button
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text" >
</button>
<edittext
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/hint"
android:text="" >
</edittext>
<button
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text" >
</button>
</linearlayout>
我们如何才能把焦点从EditText上移除呢?最简单的方法是创建一个不可见的(invisible)LinearLayout,LinearLayout将会把焦点从EditText上移走。
我们修改mail.xml布局文件,在EditText之前增加一个LinearLayout ,如下所示:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<button
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text" >
</button>
<linearlayout
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableintouchmode="true" >
<edittext
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/hint"
android:text="" >
</edittext>
<button
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text" >
</button>
</linearlayout>
</linearlayout>
最终效果如下所示:
不需要任何代码就把焦点移除了,是不是最简单的解决方案?
Android 禁止软键盘自动弹出
Android系统对EditText这个控件有监听功能,如果某个Activity中含有该控件,就会自动弹出软键盘让你输入,这个看似人性化的方案有时候并不被用户喜欢的,所以在有些情况下要禁用该功能。这几天做的应用也有这个问题,所以就查了,网上大部分都是如下方法:
[html] view plain copy- <activity android:name=".MainActivity"
- android:screenOrientation="landscape"
- android:windowSoftInputMode="adjustPan|stateHidden"
- android:configChanges="orientation|keyboardHidden">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
该方法确实有用,但只是在刚进入此Activity时能起到左右,如果该Activity中有Tab功能的切换,软键盘又会弹出来,所以有了下面这个解决办法:
在xml文件中加入一个隐藏的TextView:
[html] view plain copy- <TextView
- android:id="@+id/config_hidden"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:focusable="true"
- android:focusableInTouchMode="true"
- />
然后再在Activity中加入:
[java] view plain copy- TextView config_hidden = (TextView) this.findViewById(R.id.config_hidden);
- config_hidden.requestFocus();
这样软键盘就不会弹出了。
Android锁屏状态下弹出activity,如新版qq的锁屏消息提示
在接收消息广播的onReceive里,跳转到你要显示的界面。如:- Intent intent = new Intent(arg0,MainActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- arg0.startActivity(intent);
- super.onCreate(savedInstanceState);
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
- setContentView(R.layout.activity_main);
设置activity的theme属性:
- android:theme="@android:style/Theme.Wallpaper.NoTitleBar"
- KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
- KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("");
- keyguardLock.disableKeyguard();
- <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
java通过生日得到星座
private final static int[] dayArr = new int[] 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 ;
private final static String[] constellationArr = new String[] "摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" ;
public static String getConstellation(int month, int day)
return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month];
onItemLongClick长点击事件
- gridview.setOnItemLongClickListener(new OnItemLongClickListener()
-
- @Override
- public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
- int arg2, long arg3)
- // TODO Auto-generated method stub
- Log.e("setOnItemLongClickListener", "setOnItemLongClickListener");
- return true;
-
-
-
- );
- gridview.setOnItemClickListener(new OnItemClickListener()
-
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
- long arg3)
- Log.e("setOnItemClickListener", "setOnItemClickListener");
-
-
- );
在处理长按时,注意的细节是把onItemLongClick返回设置为true,否则长按是会执行setOnItemClickListener。
Android中如何获取视频文件的缩略图
在android中获取视频文件的缩略图有三种方法:
1.从媒体库中查询
2. android 2.2以后使用ThumbnailUtils类获取
3.调用jni文件,实现MediaMetadataRetriever类
三种方法各有利弊
第一种方法,新视频增加后需要SDCard重新扫描才能给新增加的文件添加缩略图,灵活性差,而且不是很稳定,适合简单应用
第二种方法,实现简单,但2.2以前的版本不支持
第三种方法,实现复杂,但比较灵活,推荐使用
下面给出三种方法的Demo
1.第一种方法:
public static Bitmap getVideoThumbnail(ContentResolver cr, String fileName) Bitmap bitmap = null; BitmapFactory.Options options = new BitmapFactory.Options(); options.inDither = false; options.inPreferredConfig = Bitmap.Config.ARGB_8888; //select condition. String whereClause = MediaStore.Video.Media.DATA + ” = ‘” + fileName + “‘”; Log.v(TAG, “where = ” + whereClause); //colection of results. Cursor cursor = cr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, new String[] MediaStore.Video.Media._ID , whereClause, null, null); Log.v(TAG, “cursor = ” + cursor); if (cursor == null || cursor.getCount() == 0) return null; cursor.moveToFirst(); //image id in image table. String videoId = cursor.getString(cursor .getColumnIndex(MediaStore.Video.Media._ID)); Log.v(TAG, “videoId = ” + videoId); if (videoId == null) return null; cursor.close(); long videoIdLong = Long.parseLong(videoId); //via imageid get the bimap type thumbnail in thumbnail table. bitmap = MediaStore.Video.Thumbnails.getThumbnail(cr, videoIdLong, Imag 以上是关于Android开发百科全书①的主要内容,如果未能解决你的问题,请参考以下文章 |