0%

收集整理各种Flag的作用,只有用到新的再补充,所以这里的列表不是完整的,随时更新。 先是Flag的用法:

Intent it=new Intent();
it.setClass(Setting.this,Main.class);//从Setting跳转到Main
it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//加上Flag
startActivity(it);

根据上面的例子解释: 没有加Flag:如果没有Flag,上面的这段代码是新启动Main,不管是不是已经启动Main,这样在栈中从上往下的顺序就是Main,Setting,Main。这里有两个Main FLAG_ACTIVITY_CLEAR_TOP:清除Main上面的所有Activity(包括Setting,所以这里就不用调用Setting的finish方法),如果Main已经启动了,重新启动,栈中从上往下顺序:Main FLAG_ACTIVITY_REORDER_TO_FRONT:如果Main已经启动,则不会重新启动Main,而是把在后台没显示的Main带到最前面,栈中从上往下顺序:Main,Setting FLAG_ACTIVITY_NO_HISTORY:启动Main后,如果再切换到其他Activity(包括按返回键、startActivity方法等),Main会自动调用finish方法,不会留在栈中。 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:启动过以后,在长按Home的跳出的最近启动程序中不会出现. 另,addFlags可添加多个Flag, setFlags可以通过|来设置多个Flag

一直都以为软件的设置界面都是作者自己写的,今天才发现有个现成的PreferenceActivity可以使用,非常方便。这里就不详细写PreferenceActivity的使用方法了,网上很多了(虽然很多,其实也就两三个版本,其他都是采集的)。网上的几篇文章都没介绍如何在其他Activity中取到PreferenceActivity设置的值,还好在一个国外论坛上找到了,收藏分享。

SharedPreferences pre = PreferenceManager.getDefaultSharedPreferences(this);
String dir=pre.getString("down_savedir", "");//两个参数,一个是key,就是在PreferenceActivity的xml中设置的,另一个是取不到值时的默认值

今天在写程序自动升级组件,打算把它打包成JAR,这样在任何程序中直接导入就可以用。但在在测试时发现一个问题,没有导出时,在自身调用没有任何问题,但是导出到JAR再导入其他程序时,无法执行,甚至不提示任何错误。调试了好久才发现原来是无法调用打包在jar中的资源文件(就是R文件里索引的图片、文本、Layout等等),还好没有图片,文本可以直接在程序中写死,至于Layout布局也可以在Java中写。 写了个生成布局的类:

class UpdateLayout extends ScrollView {
    public UpdateLayout(Context context) {
        super(context);
        LinearLayout LL=new LinearLayout(context);
        LL.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));//设置宽、高	  
        TextView tv = new TextView(context);
        tv.setId(0);//设置唯一的ID 相当于android:id
        tv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));//同上
        tv.setTextSize(20f);//字体大小
        tv.setPadding(10, 0, 5,0);//设置文本左右间距,没找到setMargin,但是在这里用padding效果一样的
        LL.addView(tv);
        addView(LL);
        setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    }
}

效果类似于 Android:给对话框AlertDialog添加滚动条 中XML布局。

一看到一大堆的参数就头疼,就记两个简单实用的,压缩与解压 先是安装:apt-get install rar unrar 不是管理员加sudo 解压:rar x rar文件 解压目录 压缩:rar a 输出的RAR文件 欲压缩的目录,以/结尾

给对话框AlertDialog添加滚动条 当AlertDialog里的内容很多时,就会看不到下面的内容,因为默认情况下,AlertDialog是没有滚动条的,无法滚动到下面去。我们今天就给AlertDialog加个垂直滚动条。 原理很简单,用绑定一个ScrollView的方式显示对话框内容。关于AlertDialog如何绑定View,请参考:AlertDialog用法续:在对话框显示View。 下面仅给出xml布局代码:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android"> 
<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView android:id="@+id/updatetv"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_marginLeft="10dip"
          android:textSize="20sp"
        />
</LinearLayout>
</ScrollView>

在一个类中定义几个同名的方法,这些方法具有不同的参数类型,或参数数量不同,或参数次序不同,这种方法就叫做方法的重载。当调用类中的重载方法时,Java会自动根据提供的参数类型、数量、次序选择相应的方法来调用。 下面的例子是分别求int,float,double类型参数的立方值。

public class Test2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a=5;
        System.out.println(cube(a));
        float b=5.0f;
        System.out.println(cube(b));
        double c=5.0d;
        System.out.println(cube(c));
    }
    static int cube(int i){
        return (int)Math.pow(i,3);
    }
    static float cube(float i){
        return (float)Math.pow(i,3);
    }
    static double cube(double i){
        return Math.pow(i,3);
    }

}

Java求阶乘的和,例子是求1!+2!+3!+…+20!的和,阶乘用方法计算

public class Test2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int arg=20;//求1!+2!+3!+...+20!的和
        long sum=0;
        for(int i=1;i<=arg;i++){
            sum+=fact(i);
        }
        System.out.print(sum);

    }

    public static long fact(int arg){
        long f=1;
        for(int i=1;i<=arg;i++){
            f*=i;
        }
        return f;
    }

}

如果用递归计算菲波那契 Fibonacci数列,虽然方法简单,但是如果计算的值太大,效率就很低,以下是非递归形式的计算方法。

    public static long fib(int j){
        long first=1;
        long second=1;
        long third=0;
        for(int i=3;i<=j;i++){
            third=first+second;
            first=second;
            second=third;
        }
        return third;

    }

当参数为100时,用递归几乎卡死,但是这个在1秒内(主观感受)

Java用递归计算菲波那契 Fibonacci数列

    public static long fib(int i){
        if(i>=3){
            return fib(i-1)+fib(i-2);//第三项开始,每一项都是它的前两项之和
        }
        return 1;
        
    }

注:当参数i很大时,用递归效率会很低,甚至卡死

Java 打印99乘法表,这是书上的课后练习题,从头开始学基础。

public class Test2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for(int i=1;i<=9;i++){
            for(int j=1;j<=i;j++){
                System.out.print(j+"*"+i+"="+j*i+"  ");
            }
            System.out.println();//换行
        }
    }

}