首页 > 其他分享 >[置顶] android点滴3

[置顶] android点滴3

时间:2023-05-01 14:33:46浏览次数:52  
标签:LayoutParams activity intent new Intent android null 点滴 置顶


Android判断是Pad或者手机

public boolean isTabletDevice() {
        TelephonyManager telephony = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
        int type = telephony.getPhoneType();
        if (type == TelephonyManager.PHONE_TYPE_NONE) {
            return true;
        } else {
            return false;
        }
    }




到android设置中的卸载界面


Uri uri = Uri.fromParts("package", appInfo.packageName, null);     
Intent it=new Intent();
it.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
it.setData(uri);
startActivity(it);




清除手机Cookie:


CookieManager.getInstance().removeAllCookie();


向Handler发送Message方法:


mHandler.obtainMessage().sendToTarget();//没试过 

mHandler.sendMessage(new Message());


自定义权限:


    在应用One中定义并声明权限:


    定义:


<permission 

           android:name = "com.focus.fishme.permission.READ" 

           android:label = "@string/permission_read" 

           android:description = "@string/permission_read_detail" 

           />


    声明:


<activity 

            android:name = ".ReadActivity" 

            android:permission = "com.focus.fishme.permission.READ" 

            />


    在应用Two中调用应用One中的ReadActivity。


    使用:


<uses-permission android:name = "com.focus.fishme.permission.READ"/>


android:sharedUserId说明:


    在Android中每个应用程序都会分配一个单独的用户空间,可以通过设置AndroidManifest.xml文件manifest标签的


    android:sharedUserId属性指定相同的值,使多个APK运行在同一个用户空间中,在不同APK中共享数据库或配置信息。



获取屏幕上正在显示的Activity:


    (1)ActivityManager mActivityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);


    (2)ComponentName mComponentName = mActivityManager.getRunningTasks(1).get(0).topActivity;



判断Activity是否在系统中存在:


Intent intent = new Intent(); 

    intent.setClassName("包名", "类名"); 

    if(intent.resolveActivity(getPackageManager()) == null) { 


    }


Android中获取位图的三种方法:


(1)InputStream mInputStream = getResources().openRawResource(R.drawable.图片名);


BitmapDrawable mBitmapDrawable = new BitmapDrawable(mInputStream);


Bitmap mBitmap = mBitmapDrawable.getBitmap();


(2)BitmapDrawable mBitmapDrawable = (BitmapDrawable)getResources().getDrawable(R.drawable.图片名);


Bitmap mBitmap = mBitmapDrawable.getBitmap();


(3)Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.图片名);



如何刷新View?


在UI线程中调用invalidate()方法,在非UI线程中调用postInvalidate()方法。



如何在一个apk中调用另外一个apk中的activity?


   系统提供了很多可以直接调用的Activity,通过指定的Intent就可以调用,比如打开搜索的:


Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);



     Intent.ACTION_WEB_SEARCH是一个字符串,是“搜索”这个Activity的标识,extra是传给这个activity的一些数据。发送出这个intent之后,系统根据action字符串Intent.ACTION_WEB_SEARCH知道了是要调用哪个activity,如果有重名,会弹出一个选择对话框。然后打开此activity,实现想要做的事情。


    那么,我们自己怎么来实现呢。


    首先,写一个activity,在AndroidManifest.xml里面的intent-filter中,给这个activity命名,


<intent-filter>
        <action android:name="chroya.foo"/>
        <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>



    然后安装。安装完毕之后,你会发现,系统中找不到这个程序。别急,它确实安装在手机里面了,但是因为他不是main的,所以系统不会把他当做Application的入口程序。


    而要想打开这个activity,只有知道它名字的人才可以。跟系统的intent一样使用。它的名字定义为"chroya.foo",所以,这里用这个字符串就可以调用它了:


Intent intent = new Intent("chroya.foo");
startActivity(intent);



       用刚才举的那个系统的intent说明,它的activity里面使用getIntent().getBundleExtra(SearchManager.QUERY)来接收传递进来的搜索字符串参数。而这个SearchManager.QUERY是关键字。如果要自己实现这种功能,只需要定义好关键字,然后从BundleExtra中取就行了。



如何获取屏幕上正显示的activity?


       用过ActivityManager的童鞋估计都知道,可以从ActivityManager里面可以获取到当前运行的所有任务,所有进程和所有服务,这是任务管理器的核心。


         那么,从里面我们可以发掘点什么出来吗?


         仔细看getRunningTasks的文档,里面说获取的是系统中"running"的所有task,"running"状态包括已经被系统冻结的task。而且返回的这个列表是按照顺序排列的,也就是说第一个肯定比第二个后运行。


          getRunningTasks有个整型参数,表示返回列表的最大个数。那么,我们如果把1作为参数给进去,那么他返回的task就是当前运行的那个task,然后从task中获取到最顶层的activity,这个activity就是当前显示给用户的那个activity了。


ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
Log.d("", "pkg:"+cn.getPackageName());
Log.d("", "cls:"+cn.getClassName());



       至于这个能做什么,嘿嘿,我相信你知道的。



如何判断一个activity是否存在于系统中?


已知包名和类名,如何判断这个activity是否在系统中存在呢?很简单,通过intent就行。


Intent intent = new Intent();
        intent.setClassName("包名", "类名");      
        if(getPackageManager().resolveActivity(intent, 0) == null) {
        	//说明系统中不存在这个activity
        }




如何让应用程序动态全屏和退出全屏?


    让程序全屏的方法,大家都知道,那是静态的,程序运行之初就申明了。但是如果有这样的需求:要在程序运行的过程中,执行了某个操作而使之全屏,然后还需要退出全屏,怎么做?


    如下:


WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);



    修改window的LayoutParams参数,然后加上FLAG_LAYOUT_NO_LIMITS标志,就OK了。window会自动重新布局,呈现全屏的状态。


    要退出全屏,只需要清除刚才加上的FLAG_FULLSCREEN参数,然后去掉FLAG_LAYOUT_NO_LIMITS标志。


    如下:


WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attrs);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);




如何获取状态栏和标题栏的高度?


1.获取状态栏高度:


decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。于是,我们就可以算出状态栏的高度了。


Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;



2.获取标题栏高度:


getWindow().findViewById(Window.ID_ANDROID_CONTENT)这个方法获取到的view就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了。


int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
//statusBarHeight是上面所求的状态栏的高度
int titleBarHeight = contentTop - statusBarHeight;




如何将一个视窗(windows)盖在整个Application的最上面?


private ImageView waitView;
private final void showWaiting() {
 try {
WindowManager.LayoutParams lp = null;
lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_TOAST ,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
PixelFormat.TRANSLUCENT
| WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW) ;
WindowManager mWindowManager = (WindowManager) G.appInstance
.getSystemService(Context.WINDOW_SERVICE);
if (waitView == null) {
LayoutInflater inflate = (LayoutInflater) G.appInstance
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
waitView = (ImageView) inflate.inflate(R.layout.waiting_layout,
null);
}
mWindowManager.addView(waitView, lp);
} catch (Throwable e) {
}
}



注意:


1. 要将window的类型配置成Type_toast。


2.G.appInstance 上下文需要使用Application的context.



如何判断快捷方式是否已经创建?


快捷方式信息是保存在com.android.launcher的launcher.db的favorites表中


boolean isInstallShortcut = false ;
		final ContentResolver cr = context.getContentResolver();
		final String AUTHORITY = "com.android.launcher.settings";
		final Uri CONTENT_URI = Uri.parse("content://" +
			             AUTHORITY + "/favorites?notify=true");
		
		Cursor c = cr.query(CONTENT_URI,
		new String[] {"title","iconResource" },
		"title=?",
		new String[] {"XXX" }, null);//XXX表示应用名称。
				if(c!=null && c.getCount()>0){
			isInstallShortcut = true ;
		}
		/*try {
			while (c.moveToNext()) {
                                     String tmp = "";
				tmp = c.getString(0);
			}
			} catch (Exception e) {

			} finally {
				c.close();
			}*/
		return isInstallShortcut ;
	}



要有权限:


<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>


注意:2.2及其之后的版本不能用这个方法判断!(虽然在launcher.db数据库里还有favorites这个表)



如何在android的一个应用中调用另外一个应用?


Intent intent = new Intent();
//第一个参数另一个应用的包名,第二个是需要启动的类
intent.setComponent(new ComponentName("com.Ex03_03","com.Ex03_03.Ex03_03"));
startActivity(intent);




如何获取程序版本号?


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.yourcompany.yourapp" 
   android:versionCode="109"
   android:versionName="0.1.6.109 dev">
   ...
</manifest>
 public static int getVersionCode(Context context) {
   PackageManager pm = context.getPackageManager();
   try {
      PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
      return pi.versionCode;
   } catch (NameNotFoundException ex) {}
   return 0;
}




如何让Toast充满全屏?


Toast t = Toast.makeText(this, "Hello", Toast.LENGTH_SHORT);
t.setGravity(Gravity.FILL_HORIZONTAL, 0, 0);




如何更高效简单的实现界面中的分隔线?


<View  
    android:layout_width="fill_parent"   
    android:layout_height="1px"   
    android:background="?android:attr/listDivider"   
/>




如何发起或删除另一个程序?


final Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
final ComponentName cn = new ComponentName("com.android.settings","com.android.settings.fuelgauge.PowerUsageSummary");
intent.setComponent(cn);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity( intent);



//ComponentName 两个参数一个是包名 一个是包下的主类
Uri uri = Uri.fromParts("package",“Your Package name here”, null);
Intent deleteIntent = new Intent(Intent.ACTION_DELETE, uri);
startActivity(deleteIntent);




如何监测是否静音?


AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
switch (am.getRingerMode()) { 
    case AudioManager.RINGER_MODE_SILENT: 
        Log.i("MyApp","Silent mode"); 
        break; 
    case AudioManager.RINGER_MODE_VIBRATE: 
        Log.i("MyApp","Vibrate mode"); 
        break; 
    case AudioManager.RINGER_MODE_NORMAL: 
        Log.i("MyApp","Normal mode"); 
        break; 
}




如何设置控件的随机显示位置?


RelativeLayout.LayoutParams parms=(RelativeLayout.LayoutParams)img.getLayoutParams();
parms.leftMargin = (int) (Math.random() * 320);
parms.topMargin = (int) (Math.random() * 480);
img.setLayoutParams(parms);        
img.invalidate();




如何让软键盘显示/消失?


InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);    
View view = getCurrentFocus();    
if (view != null){    
     // imm.showSoftInput(view, 0); //显示软键盘    
      imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);  
     // imm.hideSoftInputFromWindow(view.getWindowToken(), 0);//隐藏软键盘  // InputMethodManager.HIDE_NOT_ALWAYS);  
}




如何为Activity屏幕的标题栏添加图标?


@Override  
public void onCreate(Bundle icicle) {  
    super.onCreate(icicle);  
    Window win = getWindow();  
    win.requestFeature(Window.FEATURE_LEFT_ICON);      
    setContentView(R.layout.mylayout);   
    win.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.icon);  
}



要注意的是,win.setFeatureDrawableResource必须在setContentView之后,不然就没有效果。



如何设置桌面壁纸?


希望在你的程序中能设置桌面壁纸吗?很简单,首先我们需要取得设置壁纸的权限。和其它权限一样,只要在配置文件中加上以下配置信息即可。


<uses-permission android:name="android.permission.SET_WALLPAPER" />


然后在程序中调用如下代码即可设置桌面壁纸:


getApplicationContext().setWallpaper(bitmap)



如何在标题栏(titlebar)显示进度条?


protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//先给Activity注册界面进度条功能
		setContentView(R.layout.main);
		setProgressBarIndeterminateVisibility(true);//在需要显示进度条的时候调用这个方法
		setProgressBarIndeterminateVisibility(false);//在不需要显示进度条的时候调用这个方法
}




如何去掉activity顶部的gradient?


<style name="Theme.Foo" parent="android:style/Theme.Light"> 

    <item name="android:windowContentOverlay">@null</item> 

</style> 

<activity android:name=".FooActivity" 

          android:theme="@style/Theme.Foo"> ...


http://wang-peng1.iteye.com/blog/680015



如何让ScrollView强制滑到底部?


scroll.fullScroll(View.FOCUS_DOWN) 就可以了



如何ViewFlipper去掉多余空间?


ViewFlipper flipper = (ViewFlipper)findViewById(R.id.flipper);


flipper.setMeasureAllChildren(false);



如何去掉tabhost横线?


很简单 简单的有时候是因为我们太浮躁
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
 
    android:gravity="center_horizontal">       
   <TabHost  
    android:id="@android:id/tabhost"     
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
... 
... 
... 
    </TabHost> 
    </LinearLayout> 
外面加一层LinearLayout




如何判断国家?


String locale = context.getResources().getConfiguration().locale.getCountry();  
String locale = context.getResources().getConfiguration().locale.getDisplayCountry(); 
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
String countryCode = tm.getSimCountryIso();




如何让屏幕保持一直亮?


@Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }



http://wang-peng1.iteye.com/blog/769561



如何检查sim卡状态?


TelephonyManager telMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    int simState = telMgr.getSimState();
            switch (simState) {
                case TelephonyManager.SIM_STATE_ABSENT:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_PIN_REQUIRED:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_PUK_REQUIRED:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_READY:
                    // do something
                    break;
                case TelephonyManager.SIM_STATE_UNKNOWN:
                    // do something
                    break;
            }




如何从SMS获取联系人信息?


ContactItem getContactByAddr(Context context, final SMSItem sms) {  
    Uri personUri = Uri.withAppendedPath(  
            ContactsContract.PhoneLookup.CONTENT_FILTER_URI, sms.mAddress);  
    Cursor cur = context.getContentResolver().query(personUri,  
            new String[] { PhoneLookup.DISPLAY_NAME },  
            null, null, null );  
    if( cur.moveToFirst() ) {  
        int nameIdx = cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);  
        ContactItem item = new ContactItem();  
        item.mName = cur.getString(nameIdx);  
       cur.close();  
       return item;  
   }  
   return null;  
}




如何在使用gallery在flinging拖动时候不出现选择的情况?


这时候需要注意使用


gallery.setCallbackDuringFling(false)



TabHost组件,怎么调整tab的高度?


TabWidget tabWidget = mTabHost.getTabWidget();
int count = tabWidget.getChildCount();
for(int i = 0;i<count;i++){
        View view = tabWidget.getChildTabViewAt(i);// tabWidget.getChildAt(i);
        view.getLayoutParams().height = 40;
}




如何模拟SDcard?


看图:




应该能看明白。



如何对View截屏?


对于自己的View实现一些绘图或子类化的技术时可以不用系统级这样的方法,我们可以通过


view.setDrawingCacheEnabled(true); //其中View是你需要截图的的View


Bitmap bm = view.getDrawingCache();



如何区别AsyncTask和Thread+Handler?


很多网友可能发现Android平台很多应用使用的都是AsyncTask,而并非Thread和Handler去更新UI,这里Android123给大家说下他们到底有什么区别,我们平时应该使用哪种解决方案。从Android 1.5开始系统将AsyncTask引入到android.os包中,过去在很早1.1和1.0 SDK时其实官方将其命名为UserTask,其内部是JDK 1.5开始新增的concurrent库,做过J2EE的网友可能明白并发库效率和强大性,比Java原始的Thread更灵活和强大,但对于轻量级的使用更为占用系统资源。Thread是Java早期为实现多线程而设计的,比较简单不支持concurrent中很多特性在同步和线程池类中需要自己去实现很多的东西,对于分布式应用来说更需要自己写调度代码,而为了Android UI的刷新Google引入了Handler和Looper机制,它们均基于消息实现,有事可能消息队列阻塞或其他原因无法准确的使用。



  Android开发网推荐大家使用AsyncTask代替Thread+Handler的方式,不仅调用上更为简单,经过实测更可靠一些,Google在Browser中大量使用了异步任务作为处理耗时的I/O操作,比如下载文件、读写数据库等等,它们在本质上都离不开消息,但是AsyncTask相比Thread加Handler更为可靠,更易于维护,但AsyncTask缺点也是有的比如一旦线程开启即dobackground方法执行后无法给线程发送消息,仅能通过预先设置好的标记来控制逻辑,当然可以通过线程的挂起等待标志位的改变来通讯,对于某些应用Thread和Handler以及Looper可能更灵活。



如何使多个Drawable叠加(合成图片)?


大家可能知道Bitmap的叠加处理在Android平台中可以通过Canvas一层一层的画就行了,而Drawable中如何处理呢? 除了使用BitmapDrawable的getBitmap方法将Drawable转换为Bitmap外,今天Android123给大家说下好用简单的LayerDrawable类,LayerDrawable顾名思义就是层图形对象。下面直接用一个简单的代码表示:


Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.cwj);
    Drawable[] array = new Drawable[3];
     array[0] = new PaintDrawable(Color.BLACK); //黑色
     array[1] = new PaintDrawable(Color.WHITE); //白色   
     array[2] = new BitmapDrawable(bm); //位图资源        
    LayerDrawable ld = new LayerDrawable(array); //参数为上面的Drawable数组
    ld.setLayerInset(1, 1, 1, 1, 1);  //第一个参数1代表数组的第二个元素,为白色
    ld.setLayerInset(2, 2, 2, 2, 2); //第一个参数2代表数组的第三个元素,为位图资源
    mImageView.setImageDrawable(ld);



上面的方法中LayerDrawable是关键,Android开发网提示setLayerInset方法原型为public void setLayerInset (int index, int l, int t, int r, int b) 其中第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottom。对于简单的图片合成我们可以将第一和第二层的PaintDrawable换成BitmapDrawable即可实现简单的图片合成。


  • [置顶] android点滴3_标题栏

  • 大小: 5.5 KB
  • [置顶] android点滴3_android_02

  • 大小: 7.8 KB
  • 查看图片附件

标签:LayoutParams,activity,intent,new,Intent,android,null,点滴,置顶
From: https://blog.51cto.com/u_5454003/6238901

相关文章

  • [置顶] android点滴1
    如何取得手机号码,手机串号,sim卡序列号?TelephonyManagertm=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);Stringdeviceid=tm.getDeviceId();Stringtel=tm.getLine1Number();//本机号码Stringimei=tm.getSimSerialN......
  • Android 方法引用数超过 65535 优雅解决
    随着应用不断迭代更新,业务线的扩展,应用越来越大(比如:集成了各种第三方SDK或者公共开源的Library文件、jar文件)这样一来,项目耦合性就很高,重复作用的类就越来越多了,SO:问题就来了。相信大家在做自己公司项目时,都有机会遇到下面的错误:UNEXPECTEDTOP-LEVELEXC......
  • Android为应用添加角标(Badge)
    1.需求简介角标是什么意思呢?看下图即可明了:可以看到图中的乐购这个app右上角的红色的圆圈,里面有10这个数字的,就是一种角标。角标,英语是badge,也就是“徽章,像章,奖章;象征,标记”的意思。一般来说,应用的角标是用来标记有多少条提醒(Notification)没读(unread),一旦......
  • android引用资源@与属性?备忘单
    几天前我偶然发现了我Android开发早期时制作的一份学习备忘单,是为理解如何处理Android资源和主题属性的语法而整理的。令人意外的是,我发现它对现在的我非常有用,因此决定整理成更适合博客的形式并分享给大家。知道我们今天要讨论的话题了,那么请看下面,通过x......
  • Android重力感应基础
    android中的很多游戏的游戏都使用了重力感应的技术,但其apidemo却并没有重力感应的实例(不知道是不是我没找到,找到的朋友麻烦告诉我一下,谢谢),因为开发的需要,就研究了一下重力感应这方面,因为网上关于这方面的东西比较少,所以写出来跟大家交流一下,算是抛砖引玉吧。(p......
  • 在Android中实现文件读写
    android实现下载文件/***从网上下载*@paramurl下载路径*@paramoutputFile创建本地保存流的文件*@return*@return下载失败返回1(比如没有网络等情况)下载成功返回0*/publicstaticintdownloadFile(Stri......
  • android DragLayer源码
    Android_launcher的源码详细分析/**Copyright(C)2008TheAndroidOpenSourceProject**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexceptincompliancewiththeLicense.*......
  • Android提高第十五篇之ListView自适应实现表格
    上次介绍了使用GridView实现表格,这次就说说如何用ListView实现自适应的表格。GridView比ListView更容易实现自适应的表格,但是GridView每个格单元的大小固定,而ListView实现的表格可以自定义每个格单元的大小,但因此实现自适应表格也会复杂些(格单元大小不一)。......
  • Android提高第八篇之SQLite分页读取
    Android包含了常用于嵌入式系统的SQLite,免去了开发者自己移植安装的功夫。SQLite支持多数SQL92标准,很多常用的SQL命令都能在SQLite上面使用,除此之外Android还提供了一系列自定义的方法去简化对SQLite数据库的操作。不过有跨平台需求的程序就建议使用标准的SQL语句,毕竟这样容易在......
  • Android提高第九篇之GridView和SQLite实现分页表格
    上次讲的Android上的SQLite分页读取,只用文本框显示数据而已,这次就讲得更加深入些,实现并封装一个SQL分页表格控件,不仅支持分页还是以表格的形式展示数据。先来看看本文程序运行的动画:这个SQL分页表格控件主要分为“表格区”和“分页栏”这两部分,这两部分都是基于GridView实现的。......