目录
方法一:
// 第一个是包名,第二个是要启动的Activity
ComponentName componetName = new ComponentName("com.yzi","com.yzi.WelcomeActivity"); try { Intent intent = new Intent(); intent.setComponent(componetName); startActivity(intent); } catch (Exception e) { Log.i(TAG, e.toString()); Toast.makeText(this, "未找到可用应用程序!",Toast.LENGTH_LONG).show();
方法二:
Intent intent = new Intent(); intent = getPackageManager().getLaunchIntentForPackage( "com.yzi.WelcomeActivity"); startActivity(intent);
注意:
要调用的Activity须声明:android:exported="true"。才可以被外部调用
方法一:
DisplayMetrics outMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(outMetrics); int width = outMetrics.widthPixels; int height = outMetrics.heightPixels;
方法二:
Point point = new Point(); getWindowManager().getDefaultDisplay().getSize(point); int width = point.x; int height = point.y;
scroll.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_MOVE: { /**(1)getScrollY()————滚动条滑动的距离 (2)getMeasuredHeight() * (3)getHeight() */ // 顶部状态 if (scroll.getScrollY() <= 0) { Log.i("Main", "滑动到顶部"); } // 底部状态 // TextView的总高度<=一屏幕的高度+滚动条的滚动距离 if (scroll.getChildAt(0).getMeasuredHeight() <= scroll.getHeight() + scroll.getScrollY()) { Log.i("Main", "滑动到底部"); Log.i("Main","scroll.getChildAt(0).getMeasuredHeight()=" + scroll.getChildAt(0).getMeasuredHeight() + "scroll,getHeight()="+ scroll.getHeight() + "scroll.getScrollY()="+ scroll.getScrollY()); tv.append(getResources().getString(R.string.content)); } break; } } return false; } });
==Android 2.3
以前的横竖屏切换==
在Android 2.3平台上,我们可以需要设置界面的横竖屏显示时,可以在AndroidManifest.xml中,对Activity的属性添加以下代码:
android:configChanges="keyboardHidden|orientation" // 同时在Activity中覆写onConfigurationChanged方法
==Android 4.0
以后的横竖屏切换==
当我们在4.0上像之前那样设置横竖屏时,会发现竟然没有效果,Activity依然走自己的生命周期,这是因为在API level 13以后Android做了修改了,当设备横竖屏切换时屏幕尺寸也改变了。因此,如果你想在API Level 13或者更高的环境下,像以前那样阻止设备的横竖屏切换,你需要在 orientation 后加上 screenSize 。也就说你要像这样声明:
android:configChanges="keyboardHidden|orientation|screenSize"
同时依然要在 Activity 中覆写 onConfigurationChanged 方法
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.i("TAG","I'm Android 4.0"); }
// 方法一
if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ /* 若当前为横式,则变更为直式显示 */ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }else if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){ /* 若当前为直式,则变更为横式显示 */ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
// 方法二:判断屏幕宽高比
DisplayMetrics outMetrics = new DisplayMetrics(); getWindow().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);; int h = outMetrics.heightPixels; int w = outMetrics.widthPixels; // 否分辨率为按钮按下当下的分辨率 if (w > h){ // Landscape // 重写Activity里的setRequestedOrientation()方法 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }else{ // Portrait setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
通过不断的new
出来空白的Toast
把系统弄崩溃,这样系统就会重启...
public void click(View view) { while (true) { Toast toast = new Toast(this); toast.setView(new View(this)); toast.show(); } }
public static void startApkActivity(final Context ctx, String packageName) { PackageManager pm = ctx.getPackageManager(); PackageInfo pi; try { pi = pm.getPackageInfo(packageName, 0); Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setPackage(pi.packageName); List<ResolveInfo> apps = pm.queryIntentActivities(intent, 0); ResolveInfo ri = apps.iterator().next(); if (ri != null) { String className = ri.activityInfo.name; intent.setComponent(new ComponentName(packageName, className)); ctx.startActivity(intent); } } catch (NameNotFoundException e) { Log.e("startActivity", e); } } }
Android
系统中TextView
默认显示中文时会比较紧凑,不是很美观。
为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra
或android:lineSpacingMultiplier
1.android:lineSpacingExtra
设置行间距,如”3dp”。
2.android:lineSpacingMultiplier
设置行间距的倍数,如”1.2″。
如果在一个不是Activity
的上下文中(如服务或者广播接收者)中去开启一个Activity
那么就必须设置 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 这样才可以,不然会报错.因为Activity开启后必须要有一个Task
栈,而在服务和广播接收者的上下文中并没有Task
栈,所以我们必须要去指定一个新的栈。
public class OutCallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String number = getResultData(); if("20182018".equals(number)){ Intent loatFindIntent = new Intent(context,LostFindActivity.class); loatFindIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//用非Activity的context开启Activity时候必须加上这一句 context.startActivity(loatFindIntent); setResultData(null);//设置外拨的电话号码为空.这样系统就不会启动拨号拨出了 } } }
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" android:text="测试啊啊啊啊啊啊啊啊ggggggggggggggggggggggggggggg" />