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
  1. String sAgeFormat = getResources().getString(R.string.old);  
  2. String sFinalAge = String.format(sAgeFormat, 23);  
将%1$d替换为23; 
%1$d表达的意思是整个name=”old”中,第一个整型的替代。如果一个name中有两个需要替换的整型内容,则第二个写为:%2$d,以此类推;具体程序中替换见下面的string型; 
2、string型,比如“我的名字叫李四,我来自首都北京”;这里的“李四”和“首都北京”都需要替换。  在string.xml中可以这样写,<string name="alert">我的名字叫%1$s,我来自%2$s</string>  在程序中:  [java] view plaincopy
  1. view sourceprint?1 String sAgeFormatString sAgeFormat1= getResources().getString(R.string.alert);     
  2.   
  3. String sFinal1 = String.format(sAgeFormat1, "李四","首都北京");   
这里两个string需要替换的,按照上面程序的顺序依次对应。

<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
  1. <activity android:name=".MainActivity"  
  2.                android:screenOrientation="landscape"  
  3.                android:windowSoftInputMode="adjustPan|stateHidden"  
  4.                android:configChanges="orientation|keyboardHidden">           
  5.                <intent-filter>  
  6.                    <action android:name="android.intent.action.MAIN"/>  
  7.                    <category android:name="android.intent.category.LAUNCHER"/>  
  8.                </intent-filter>         
  9.      </activity>   

该方法确实有用,但只是在刚进入此Activity时能起到左右,如果该Activity中有Tab功能的切换,软键盘又会弹出来,所以有了下面这个解决办法:

在xml文件中加入一个隐藏的TextView:

[html]  view plain copy
  1. <TextView  
  2.         android:id="@+id/config_hidden"  
  3.         android:layout_width="wrap_content"  
  4.         android:layout_height="wrap_content"  
  5.         android:focusable="true"  
  6.         android:focusableInTouchMode="true"  
  7.         />  

然后再在Activity中加入:

[java]  view plain copy
  1. TextView config_hidden = (TextView) this.findViewById(R.id.config_hidden);  
[java]  view plain copy
  1. config_hidden.requestFocus();  

这样软键盘就不会弹出了。


Android锁屏状态下弹出activity,如新版qq的锁屏消息提示

在接收消息广播的onReceive里,跳转到你要显示的界面。如:
  1. Intent intent = new Intent(arg0,MainActivity.class);
  2. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        
  3. arg0.startActivity(intent);
在该activity的onCreate()方法里:
  1. super.onCreate(savedInstanceState);
  2. getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
  3. setContentView(R.layout.activity_main);

设置activity的theme属性:
  1. android:theme="@android:style/Theme.Wallpaper.NoTitleBar"
添加点击事件,进入app,突破锁屏:
  1. KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
  2. KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("");
  3. keyguardLock.disableKeyguard();
在menifest中加入该权限:
  1. <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长点击事件

  1.      gridview.setOnItemLongClickListener(new OnItemLongClickListener()   
  2.   
  3.         @Override  
  4.         public boolean onItemLongClick(AdapterView<?> arg0, View arg1,  
  5.                 int arg2, long arg3)   
  6.             // TODO Auto-generated method stub  
  7.             Log.e("setOnItemLongClickListener""setOnItemLongClickListener");  
  8.             return true;  
  9.           
  10.            
  11.   
  12.       );  
  13.      gridview.setOnItemClickListener(new OnItemClickListener()  
  14.   
  15. @Override  
  16. public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  17.         long arg3)   
  18.     Log.e("setOnItemClickListener""setOnItemClickListener");  
  19.   
  20.           
  21.      );  

 

在处理长按时,注意的细节是把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开发百科全书①的主要内容,如果未能解决你的问题,请参考以下文章

Android开发百科全书③

Android开发探索艺术学习笔记

android开发笔记之权重(layout_weight)

Android开发, 布局,控件占用剩余所有宽度。

Python开发简单爬虫---爬取百度百科页面数据

方正圆劲 沉雄厚重——张铜彦隶书管窥

(c)2006-2024 SYSTEM All Rights Reserved IT常识