Android禁止横屏竖屏切换程序代码

 更新时间:2016年9月20日 19:59  点击:2094
在Android中要让一个程序的界面始终保持一个方向,不随手机方向转动而变化的办法: 只要在AndroidManifest.xml里面配置一下就可以了,小编来给大家介绍一款Android禁止横屏竖屏切换程序代码,有需要了解的同学可参考

在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入android:screenOrientation="landscape"属性即可(landscape是横向,portrait是竖屏)。例如:

 代码如下 复制代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ray.linkit"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Main"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
                <activity android:name=".GamePlay"
                android:screenOrientation="portrait"></activity>
                <activity android:name=".OptionView"
                android:screenOrientation="portrait"></activity>
    </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest>

另外,android中每次屏幕方向切换时都会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!

要避免在转屏时重启activity,可以通过在androidmanifest.xml文件中重新定义方向(给每个activity加上android:configChanges=”keyboardHidden|orientation”属性),并根据Activity的重写onConfigurationChanged(Configuration newConfig)方法来控制,这样在转屏时就不会重启activity了,而是会去调用onConfigurationChanged(Configuration newConfig)这个回调方法。例如

 代码如下 复制代码

if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
  //横屏
  setContentView(R.layout.file_list_landscape);
}else{
  //竖屏
   setContentView(R.layout.file_list);
}

需要注意的是如果你的横竖屏布局不一样,那么使用onConfigurationChanged会导致切换之后布局没有变化,所以该设置慎用为好。
.

本文章来给大家介绍利用z4root工具快速来给你手机获取ROOT权限的操作方法,有需要了解的朋友可进入参考。

1,首页为手机安装驱动,如果你没有驱动软件可以在本站下载。(安装驱动后如果手机无法链接上电脑,请打开手机的USB调试,
步骤如下:设置——选择应用程序-——开发;)

2,2、手机关机;

3、按住音量下键+菜单键(最左边)再按住电源键。开机后不要马上松手等待5-10秒,这时开机界面会停留在开机第一屏。

4、松手,插入USB线,进入你指定工具所在的硬盘位置双击打开附件解压后得到的ROOT工具A65-Tools-v2.exe;

 
5、选择 1 后按回车键,完成后会自动重启手机;

root后重启后查看手机菜单是否有“授权管理(superuser)”或“超级用户”,如果有,那恭喜你,ROOT成功了~~如果没有,请多试几次,我就试了三次才成功的

本文章来给大家介绍Android中Bitmap和Drawable用法详解,有需要了解的同学可进入参考。

一、相关概念
1、Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象2、Canvas画布,绘图的目的区域,用于绘图3、Bitmap位图,用于图的处理4、Matrix矩阵二、Bitmap
1、从资源中获取Bitmap

Resources res = getResources();
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);

2、Bitmap → byte[]

 代码如下 复制代码

public byte[] Bitmap2Bytes(Bitmap bm) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
    return baos.toByteArray();
}

3、byte[] → Bitmap

 代码如下 复制代码

public Bitmap Bytes2Bimap(byte[] b) {
    if (b.length != 0) {
        return BitmapFactory.decodeByteArray(b, 0, b.length);
    } else {
        return null;
    }
}

Bitmap缩放

 代码如下 复制代码

public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();
    Matrix matrix = new Matrix();
    float scaleWidth = ((float) width / w);
    float scaleHeight = ((float) height / h);
    matrix.postScale(scaleWidth, scaleHeight);
    Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
    return newbmp;
}

5、将Drawable转化为Bitmap

 代码如下 复制代码

public static Bitmap drawableToBitmap(Drawable drawable) {
        // 取 drawable 的长宽
        int w = drawable.getIntrinsicWidth();
        int h = drawable.getIntrinsicHeight();
        // 取 drawable 的颜色格式
        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                : Bitmap.Config.RGB_565;
        // 建立对应 bitmap
        Bitmap bitmap = Bitmap.createBitmap(w, h, config);
        // 建立对应 bitmap 的画布
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, w, h);
        // 把 drawable 内容画到画布中
        drawable.draw(canvas);
        return bitmap;
    }


public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();
    Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, w, h);
    final RectF rectF = new RectF(rect);
    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
    return output;
}


6、获得圆角图片

 代码如下 复制代码

public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
    final int reflectionGap = 4;
    int w = bitmap.getWidth();
    int h = bitmap.getHeight();
    Matrix matrix = new Matrix();
    matrix.preScale(1, -1);
    Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, h / 2, w,
            h / 2, matrix, false);
    Bitmap bitmapWithReflection = Bitmap.createBitmap(w, (h + h / 2),
            Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmapWithReflection);
    canvas.drawBitmap(bitmap, 0, 0, null);
    Paint deafalutPaint = new Paint();
    canvas.drawRect(0, h, w, h + reflectionGap, deafalutPaint);
    canvas.drawBitmap(reflectionImage, 0, h + reflectionGap, null);
    Paint paint = new Paint();
    LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
            bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,
            0x00ffffff, TileMode.CLAMP);
    paint.setShader(shader);
    // Set the Transfer mode to be porter duff and destination in
    paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
    // Draw a rectangle using the paint with our linear gradient
    canvas.drawRect(0, h, w, bitmapWithReflection.getHeight()
            + reflectionGap, paint);
    return bitmapWithReflection;
}

三、Drawable

 代码如下 复制代码

Bitmap bm=xxx; //xxx根据你的情况获取
BitmapDrawable bd= new BitmapDrawable(getResource(), bm);
因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

2、Drawable缩放

 代码如下 复制代码

public static Drawable zoomDrawable(Drawable drawable, int w, int h) {
    int width = drawable.getIntrinsicWidth();
    int height = drawable.getIntrinsicHeight();
    // drawable转换成bitmap
    Bitmap oldbmp = drawableToBitmap(drawable);
    // 创建操作图片用的Matrix对象
    Matrix matrix = new Matrix();
    // 计算缩放比例
    float sx = ((float) w / width);
    float sy = ((float) h / height);
    // 设置缩放比例
    matrix.postScale(sx, sy);
    // 建立新的bitmap,其内容是对原bitmap的缩放后的图
    Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,
            matrix, true);
    return new BitmapDrawable(newbmp);
}

本文章来给大家介绍Android RelativeLayout 属性用法详解,有需要了解RelativeLayout 属性的同学可进入参考参考。

// 相对于给定ID控件

 代码如下 复制代码

android:layout_above 将该控件的底部置于给定ID的控件之上;

android:layout_below 将该控件的底部置于给定ID的控件之下;

android:layout_toLeftOf    将该控件的右边缘与给定ID的控件左边缘对齐;

android:layout_toRightOf  将该控件的左边缘与给定ID的控件右边缘对齐;

android:layout_alignBaseline  将该控件的baseline与给定ID的baseline对齐;

android:layout_alignTop        将该控件的顶部边缘与给定ID的顶部边缘对齐;

android:layout_alignBottom   将该控件的底部边缘与给定ID的底部边缘对齐;

android:layout_alignLeft        将该控件的左边缘与给定ID的左边缘对齐;

android:layout_alignRight      将该控件的右边缘与给定ID的右边缘对齐;

// 相对于父组件

android:layout_alignParentTop      如果为true,将该控件的顶部与其父控件的顶部对齐;

android:layout_alignParentBottom 如果为true,将该控件的底部与其父控件的底部对齐;

android:layout_alignParentLeft      如果为true,将该控件的左部与其父控件的左部对齐;

android:layout_alignParentRight    如果为true,将该控件的右部与其父控件的右部对齐;

// 居中

android:layout_centerHorizontal 如果为true,将该控件的置于水平居中;

android:layout_centerVertical     如果为true,将该控件的置于垂直居中;

android:layout_centerInParent   如果为true,将该控件的置于父控件的中央;

// 外部间隔

android:layout_marginTop       上偏移的值;

android:layout_marginBottom  下偏移的值;

android:layout_marginLeft   左偏移的值;

android:layout_marginRight   右偏移的值;

RelativeLayout代码

 代码如下 复制代码

RelativeLayout relativeLayout = new RelativeLayout(context);
  Spinner spinner = new Spinner(context);
  edit_text_add_country = new AutoCompleteTextView(context);
  edit_text_add_stock = new EditText(this);
  RadioGroup containCountry = new RadioGroup(context);
 
 
  spinner.setId(1);
  edit_text_add_country.setId(2);
  edit_text_add_stock.setId(3);
  containCountry.setId(4);
 
  String[] mCountries = { "China" , "USA", "China2", "Comunicate"};
  List<String> allcountries = new ArrayList<String>();
  ArrayAdapter<String> aspnCountries;
 
  for (int i = 0; i < mCountries.length; i++) {
   allcountries.add(mCountries[i]);
  }
 
  aspnCountries = new ArrayAdapter<String>(this,
    android.R.layout.simple_spinner_item, allcountries);
  aspnCountries
    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  spinner.setAdapter(aspnCountries);
  edit_text_add_country.setAdapter(aspnCountries);
  edit_text_add_country.setHint("input country name");
  edit_text_add_stock.setHint("input stock name");
 
  RelativeLayout.LayoutParams param1, param2, param3;
  param1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
  param2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
  param2.addRule(RelativeLayout.BELOW, 1);
  param3 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
  param3.addRule(RelativeLayout.BELOW, 4);
  ViewGroup.LayoutParams param4, param5;
  param4 = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
  param5 = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
 
  containCountry.addView(spinner,param4);
  containCountry.addView(edit_text_add_country, param5);
 
  relativeLayout.addView(containCountry, param1);
  relativeLayout.addView(edit_text_add_stock, param3);
 
  builder.setView(relativeLayout);

看个实例

RelativeLayout代码实现及点击设置

 代码如下 复制代码

public class Main extends Activity {
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
      
        ArrayList<Person> personList = new ArrayList<Person>();
        personList.add(new Person("zwx","23"));
        personList.add(new Person("zwx1","24"));
        personList.add(new Person("zwx2","25"));
      
        LinearLayout ll = (LinearLayout)findViewById(R.id.LinearLayout01);


        for(Person person : personList){
         RelativeLayout rl = new RelativeLayout(this);
         RelativeLayout.LayoutParams  rll = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
          rl.setLayoutParams(rll);


          TextView tv1 = new TextView(this);
          RelativeLayout.LayoutParams tv1_rl = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
          tv1_rl.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
          tv1.setText(person.getName());
          rl.addView(tv1, tv1_rl);
        
          TextView tv2 = new TextView(this);
          RelativeLayout.LayoutParams tv2_rl = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
          tv2_rl.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
          tv2.setText(person.getAge());
          rl.addView(tv2, tv2_rl);


          ll.addView(rl);
          rl.setOnClickListener(new View.OnClickListener() {
    
                @Override
              public void onClick(View v) {
                   Toast.makeText(Main.this, "11", 5000).show();
                }
               }) ;
        }
    }
}


注意:不能在RelativeLayout容器本身和他的子元素之间产生循环依赖,比如说,不能将RelativeLayout的高设置成为WRAP_CONTENT的时候将子元素的高设置成为ALIGN_PARENT_BOTTOM。

Android中使用ant混淆编译方法有需要的同学可参考参考。

1.拿一个普通项目来说,首先为它加上ant编译功能。

 代码如下 复制代码

android update project --name project_name -t 3 -p D:/temp/project_name

此时会在项目根目录自动生成一个名为build.xml的ant脚本。上面的project_name是你的项目名称。

2.加入混淆功能

就第一步来说,在命令行中已经可以使用ant进行编译了。因为Android中是这样的,在输入命令ant debug的时候会自动调用D:/android-sdk-windows/tools/ant/main_rules.xml目录下的规则文件,所以无需自己写ant脚本了。既然它会调用默认的规则文件(默认文件没有加入混淆功能),那么我们想要混淆,直接在这个规则文件上修改就好了。在名为-dex的target后加入一个target,代码如下:

 代码如下 复制代码
1 <target name="optimize" depends="compile">    <jar basedir="${out.classes.absolute.dir}" destfile="temp.jar">    <java jar="D:/android-sdk-windows/tools/proguard/lib/proguard.jar" fork="true" failonerror="true"><jvmarg value="-Dmaximum.inlined.code.length=32">        <arg value="-injars temp.jar"><arg value="-outjars optimized.jar"><arg value="-libraryjars '${android.jar}'"><!-- value="-libraryjars ${library-jar}/some_lib_used.jar"> --><arg value="-dontpreverify"><arg value="-dontoptimize"><arg value="-dontusemixedcaseclassnames"><arg value="-repackageclasses"><arg value="-allowaccessmodification">        <arg value="-keep public class * extends android.app.Activity">          <arg value="-keep public class * extends android.app.Service">          <arg value="-keep public class * extends android.content.BroadcastReceiver">          <arg value="-keep public class * extends android.content.ContentProvider">          <arg value="-keep public class * extends android.view.View">         <arg value="-optimizationpasses 1">        <arg value="-verbose"><arg value="-dontskipnonpubliclibraryclasses"><arg value="-dontskipnonpubliclibraryclassmembers"><arg value="-ignorewarning">    </arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></!--></arg></arg></arg></jvmarg></java>    <delete file="temp.jar">    <delete dir="${out.classes.absolute.dir}">    <mkdir dir="${out.classes.absolute.dir}">    <unzip src="optimized.jar" mce_src="optimized.jar" dest="${out.classes.absolute.dir}">    <delete file="optimized.jar"></delete></unzip></mkdir></delete></delete></jar></target>

修改上面代码涉及到路径的地方,改成本地对应的路径。<arg value="-ignorewarning"/>这一行是自己加入的,意思是忽略警告。

接着在名为-dex的target中进行一个混淆依赖,加入后代码如下:

 代码如下 复制代码
1 <target name="-dex" depends="compile, optimize, -post-compile, -obfuscate" unless="do.not.compile">        <if condition="${manifest.hasCode}">            <then>                <dex-helper>            </dex-helper></then>            <else>                <echo>hasCode = false. Skipping...</echo>            </else>        </if></target>

实际上加入的只是optimize,意思是这个target依赖target optimize。

3.开始编译

可以在命令行中编译了,编译后把class.dex进行反编译,可以看出来混淆成功。不知道为什么在我们的项目中反编译不回来,但是可以保证混淆是成功了。我拿过其他例子项目编译后反编译过,可以看下图:(不好意思,注册一星期之内不能上传图片)

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31