初步学习界面编程

来源:互联网 发布:如何进入淘宝试用中心 编辑:程序博客网 时间:2024/04/23 15:11

近来开始了界面编程的学习,做了一些简单的练习,照着疯狂安卓的书..大部分的程序可以顺利的写完运行,也有一些功能未实现,一些错误需要排查好几次>.<,比如随手滑动的小球,一直不能随手动..后来仔细排查,是将接触点的xy坐标写成了xx..再后来,TableLayout里可以设置某行可以被拉伸,但不很理解,是指在宽度不够时被旁边组件挤压拉伸呢,还是可以手动拉伸..(标记:回首再做标记),还有就是android:inputType 选择password,phone等,在模拟器上很难弹出键盘,真机无碍...ImageView中设置透明度,setImageAlpha,原先的setAlpha已在api16后过时..

     获取本机的分辨率:final DisplayMetrics dm = new DisplayMetrics();
super.getWindowManager().getDefaultDisplay().getMetrics(dm);  dm.widthPixels 、dm.heighePixels..但是在点击图片,放大点击点的图片时,不能成功演示..(标签,回首来解释)..

.............................吐糟自己的看书速度,一天只有五六页,我去...................................

近来在看adapter的东西,好几个adapter好乱;

ArrayAdapter:(context,int textViewResourceId,List<T> list)context当前的环境 this, textViewResourceId 是一个布局文件的id,可以自己写,也可以调用系统自带的. list是一个数据源,需要展示的数据。

SimpleAdapter: API如图

第二个参数是由一个map组成的list集合,第三个是布局文件的id,第四个是一个String数组,内容是map的key,以此展示改key对应的value,第五个是一个int集合,内容是map的value要显示的布局文件的id

**************************************************************************************************************************************

对话框alertDialog有三个按钮,确定、取消、普通,确定按钮setPositiveButton(builder),  取消跟普通类似;setNegativeButton(builder).create().show()    、 setNeutralButton(builder).create().show()  初看时,对于确定按钮不加create().show()方法很不理解...经过试验,发现,如果确定按钮添加了该方法,则当你选择了某项后,不会退出对话框,而是保留一个确定按钮,只有再次点击一项或者点击确定按钮后,才能退出....因此一般建议不要create().show();

单选列表项singleChoice有点不同的地方是:点击某个项后,不会退出对话框,而是只有点击确定按钮后才会退出

----------------------------------------------------------------分割--------------------------------------------------------------------------------------------

在学习菜单时,发现setIcon(图片路径)不会显示出来...原来android4.0之后,默认的设置为fasle;源代码如下:

public class MenuBuilder implements Menu {
...
private boolean mOptionalIconsVisible = false;
....
    void setOptionalIconsVisible(boolean visible) {
        mOptionalIconsVisible = visible;
    }

    boolean getOptionalIconsVisible() {
        return mOptionalIconsVisible;
    }
...
}

如果想要将Icon显示出来,需要设置mOptionalIconsVisible 为true,而MenuBuilder对象无法被创建,属于系统内部的框架类..因此需要用反射调用setOptionalIconsVisible方法,来设置mOptionalIconsVisible ,具体实现如下:

public boolean onCreateOptionsMenu(Menu menu) {
setIconEnable(menu,true);


private void setIconEnable(Menu menu, boolean b) {
// TODO 自动生成的方法存根
Class<?> classz;
try {
classz = Class.forName("com.android.internal.view.menu.MenuBuilder");
Method m = classz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
m.setAccessible(true);
m.invoke(menu, b);
} catch (Exception e) {
e.printStackTrace();
}
}

则可以显示出来了,效果图丢了,总之就是菜单项左边显示一个图标。


学习一段时间了才发现,经常碰到Bundle类这个参数,可是却不怎么懂...近来了解了一下,记录在此:


Bundle是束、捆的意思...因此基本了解是用来传递值的...

Bundle类是一个key-value对,“A mapping from String values to various Parcelable types.

类继承关系:

java.lang.Object
     android.os.Bundle

完整代码在此:

  1. public class TestBundle extends Activity {    
  2.       
  3.     private Button button1;  
  4.     private OnClickListener cl;   
  5.     public void onCreate(Bundle savedInstanceState) {    
  6.         super.onCreate(savedInstanceState);    
  7.         setContentView(R.layout.main);  
  8.           
  9.         button1 = (Button) findViewById(R.id.button1);  
  10.         cl = new OnClickListener(){  
  11.             @Override  
  12.             public void onClick(View arg0) {  
  13.                 // TODO Auto-generated method stub  
  14.                 Intent intent = new Intent();    
  15.                 intent.setClass(TestBundle.this, Target.class);    
  16.                 Bundle mBundle = new Bundle();    
  17.                 mBundle.putString("Data""data from TestBundle");//压入数据    
  18.                 intent.putExtras(mBundle);    
  19.                 startActivity(intent);  
  20.             }  
  21.         };  
  22.         button1.setOnClickListener(cl);  
  23.     }  
  24. }    

  1. public class Target extends Activity{    
  2.   
  3.     public void onCreate(Bundle savedInstanceState) {    
  4.           
  5.         super.onCreate(savedInstanceState);    
  6.         setContentView(R.layout.target);    
  7.         Bundle bundle = getIntent().getExtras();   //得到传过来的bundle  
  8.         String data = bundle.getString("Data");//读出数据    
  9.         setTitle(data);    
  10.   
  11.     }    
  12. }    

------------------------------------------------------------------------分割线-------------------------------------------------------------------------------

进来碰到一些小问题,当我们的程序入口选择为非Activity子类时,会出现一个ClassCastException错误...酱紫的



由于习惯,会对新创建的MainActivity类进行操作,如果有时候我们将其继承了Fragment,而不是Activity,则会出现上述错误..

修改方法为,在AndroidManifest.xml中,将下图


中的name属性修改为你需要的程序入口,即继承了Activity 的类...

action跟category是作为程序入口的标识,缺一不可...

category,

如 果一个应用没有LAUNCHER则该apk仍能安装到设备上,但是在主程序图中看不到。如果给那个Activity 设定了LAUNCHER,且同时设定了Main,则这个Activity就可出现在程序图中;如果没有Main,则不知启动哪个Activity,故也不会有图标出现。
另外在xml文件中添加fragment标签,name属性一定指向Fragment类
否则会出现..额,错误找不到了..就酱.

使用SharedPreferences时,当我们需要获取其实例时,需要用到getSharedPreferences(String name, int mode)方法...mode有如下几个值,MODE_PRIVATE  、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE...这三个的用法,不用解释了,书上都能看到,,,可是,在我们使用时,会发现eclipse提示,它们几个小东西,已经过期了(过期食品不要吃呀....)好吧,Ctrl+1也没有提示我们该用什么....API17以后,这几个常量的写法,已经不提倡了,我们可以使用0,1,2来代替...另外,还有一种MODE_APPEND模式,该模式会判断是否存在原文件,存在就往其中追加内容...不存在则创建...不过,这并没有什么卵用..刚刚测试的..这个在SharedPreferences中没有用,貌似是在创建文件时用到...后期再补充吧,,,总之,知道有这么个玩意就好了....

另外,除了getSharedPreferences(String name,int mode)方法外,还可以使用getPreferences(int  mode)方法..该方法会创建一个与当前类名相同的文件名(不包含前面的限定名)..例如MainActivity.xml

0 0
原创粉丝点击