安卓学习随笔(1)

来源:互联网 发布:萨德对中国的影响 知乎 编辑:程序博客网 时间:2024/05/19 14:35
  1. activity 设置全屏
         第一种办法:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE); // 去除标题  必须在setContentView()方法之前调用
        setContentView(R.layout.activity_main);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 设置全屏
        surfaceview = (SurfaceView) findViewById(R.id.surfaceview);

    }
     

       第二种办法:

        使用xml的方法,在该项目的AndroidManifest.xml文件中,在需要全屏的Activity元素中添加属性 

        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

  这样就可以实现这个Activity的全屏显示,如果只是不要标题栏,即需要保留系统自带的任务栏的话,则使用

      android:theme="@android:style/Theme.NoTitleBar"

  这样的好处是可以不用在代码中进行修改

      2.android获取屏幕的高度和宽度用到WindowManager这个类,两种方法:

     1、WindowManager wm = (WindowManager) getContext()
                    .getSystemService(Context.WINDOW_SERVICE);
    Display对象获取屏幕高宽 :
      int width = wm.getDefaultDisplay().getWidth(); //返回显示界面宽度即屏幕宽度
      int height = wm.getDefaultDisplay().getHeight();//返回显示界面高度即屏幕高度
     2、WindowManager wm = this.getWindowManager();
      int width = wm.getDefaultDisplay().getWidth();
      int height = wm.getDefaultDisplay().getHeight(); 

    3、 DisplayMetrics metric = new DisplayMetrics();  //定义DisplayMetrics 对象    
     getWindowManager().getDefaultDisplay().getMetrics(metric);   //取得窗口属性     
     int width = metric.widthPixels;     // 屏幕宽度(像素)//窗口的宽度 
     int height = metric.heightPixels;   // 屏幕高度(像素)   //窗口高度   
     float density = metric.density;      // 屏幕密度(0.75 / 1.0 / 1.5)  
     int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240)

    3.动态加载布局
   (1)第一种方式,直接通过传统的 setContentView(R.layout.*) 来加载,即:
     setContentView(R.layout.activity_main);                                                           
    TextView text = (TextView)this.findViewById(R.id.DynamicText);  
    text.setText("Hello World");  
   (2)第二种方式,通过 LayoutInflater 来间接加载,即:
    LayoutInflater mInflater = LayoutInflater.from(this);       
    View contentView  = mInflater.inflate(R.layout.activity_main,null);                                                                                                     
    TextView text = (TextView)contentView.findViewById(R.id.DynamicText);  
    text.setText("Hello World");                                                
    setContentView(contentView); 
    注意事项:
    LayoutInflater 相当于一个“布局加载器”,有三种方式可以从系统中获取到该布局加载器对象,如:
    方法一: LayoutInflater.from(this);
    方法二:(LayoutInflater)this.getSystemService(this.LAYOUT_INFLATER_SERVICE);
    方法三:this.getLayoutInflater();
   通过该对象的 inflate方法,可以将指定的xml文件加载转换为View类对象,该xml文件中的控件的对象,都可以通过该View对象的findViewById方法获取。
   (Inflate(resId , null ) 只创建temp ,返回temp
   Inflate(resId , parent, false )创建temp,然后执行temp.setLayoutParams(params);返回temp
   Inflate(resId , parent, true ) 创建temp,然后执行root.addView(temp, params);最后返回root)
   (3)第三种方式,纯粹地手工创建 UI 界面
    xml 文件中的任何标签,都是有相应的类来定义的,因此,我们完全可以不使用xml 文件,纯粹地动态创建所需的UI界面,示例如下:
    LinearLayout layout = new LinearLayout(this);                                                                                                      
    TextView text = new TextView(this);  
    text.setText("Hello World");  
    text.setLayoutParams(new    ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));                                                                            
    layout.addView(text);                                                                                                     
    setContentView(layout)   
   4.android ellipsize的使用 
   在TextView 和 EditText中,可以使用ellipsize来设置文字溢出隐藏,如:“一段很长的文本...”
   用法如下:
  在xml中
  android:ellipsize = "end"   省略号在结尾
  android:ellipsize = "start"   省略号在开头
  android:ellipsize = "middle" 省略号在中间
  android:ellipsize = "marquee" 跑马灯
  最好加一个约束android:singleline = "true" 或者 android:maxLines="1"
  当然也可以用代码语句
  tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
  tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));
  tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));
  tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));
  最好再加一个约束tv.setSingleLine(true);
  注:EditText中不支持marquee模式!
  5.android 去掉listview之间的黑线
  方法1:listView.setDividerHeight(0);
  方法2:this.getListView().setDivider(null);
  方法3:android:divider="@null"

  注.android:cacheColorHint="#00000000" 设置其为透明! 默认为黑色!
  listView.setCacheColorHint(0)
  自定义listview的时候,当你不使用android:cacheColorHint="#00000000" 会出现下面选中一个空间黑色底色的情况,破坏整体美观度:
当你不使用android:listSelector属性,默认会显示选中的item为橙黄底色,有时候我们需要去掉这种效果:
<ListView
                android:id="@+id/recommand_app_list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_below="@id/recommands_list_view_header_divider"
                android:background="@drawable/ic_content_bg_repeat"
                android:divider="@drawable/ic_list_divider_repeat"
                android:dividerHeight="1dp"
                android:fadingEdge="none"
                android:persistentDrawingCache="none"
                android:scrollbars="none"
                android:scrollingCache="false"
                android:smoothScrollbar="true" > 
            </ListView>
 ListView是一个经常要用到的android控件,现总结遇到过的一些美化的小细节。
1、listview在拖动的时候背景图片消失变成黑色背景,等到拖动完毕我们自己的背景图片才显示出来
解决:在XML中加入
android:scrollingCache="false" 或 android:cacheColorHint="#00000000"
2、listview的上边和下边有黑色的阴影
解决: android:fadingEdge="none"
3、修改listview的Item默认选择时的黄色背景
解决:在Java文件中使用listview.setSelector()方法,或使用如下代码
android:listSelector="#00000000"//这样写是透明的,也可加入Drawable图片
4、lsitview的每一项之间需要设置一个图片做为间隔
解决: android:divider=”@drawable/list_driver”
5.ListView刷新后自动滚到最底部:
msgList.setSelection(msgList.getAdapter().getCount()-1);
6. Activity中设置 如何隐藏小键盘:
 Android:windowSoftInputMode="stateUnspecified",默认设置:软键盘的状态(隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。                                    
 "stateUnchanged", 软键盘被保持上次的状态。 "stateHidden", 当用户选择该Activity时,软键盘被隐藏。                                       
 "stateAlwaysHidden", 软键盘总是被隐藏的。 "stateVisible",. 软键盘是可见的。                                      
 "stateAlwaysVisible", 当用户选择这个Activity时,软键盘是可见的。 
 "adjustUnspecified", . 它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间, 或是否窗口上的内容得到屏幕上当前的焦点是可见的。
 系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。 
 如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。
 这个是主窗口默认的行为设置。也就是说, 系统自动决定是采用平移模式还是压缩模式,决定因素在于内容是否可以滚动。   
 "adjustResize", (压缩模式) 当软键盘弹出时,要对主窗口调整屏幕的大小以便留出软键盘的空间。 "adjustPan"] > 
 (平移模式:当输入框不会被遮挡时,该模式没有对布局进行调整,然而当输入框将要被遮挡时, 窗口就会进行平移。也就是说,该模式始终是保持输入框为可见      . . .
  //启动activity时不自动弹出软键盘
 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
7:隐藏软键盘:
           EditText edit=(EditText)findViewById(R.id.edit);  
           InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
           imm.hideSoftInputFromWindow(edit.getWindowToken(),0);
8.EditText默认不弹出软件键盘
方法一:
在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden
例如:<activity Android:name=".Main"
                  Android:label="@string/app_name"
                  Android:windowSoftInputMode="adjustUnspecified|stateHidden"
                  Android:configChanges="orientation|keyboardHidden">
            <intent-filter>
                <action Android:name="android.intent.action.MAIN" />
                <category Android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
方法二:
让EditText失去焦点,使用EditText的clearFocus方法
例如:EditText edit=(EditText)findViewById(R.id.edit);
方法三:
强制隐藏Android输入法窗口
例如:EditText edit=(EditText)findViewById(R.id.edit);  
           InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
           imm.hideSoftInputFromWindow(edit.getWindowToken(),0);
方法四.EditText始终不弹出软件键盘
例:EditText edit=(EditText)findViewById(R.id.edit);
       edit.setInputType(InputType.TYPE_NULL);


9.怎么在代码中设ImageView的src属性
setImageDrawable(drawable);
setImageBitmap(bm);
setImageResource(resId);

0 0