Android基本概念小整理(二)

目前创新互联公司已为上1000家的企业提供了网站建设、域名、虚拟主机、网站托管、服务器托管、企业网站设计、相城网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

1.SQLite

图形化界面来查看数据库,使用Sqliteman

>sudo apt-get install sqliteman

2.关于Activity间的跳转

>1.Intent it = getIntent();

>2.Intent it = new Intent();

说说第一种,假设注册了个单击跳转的事件,第一次点击是有反应的,现在退出整个应用程序,再次启动,此时的单击事件都失效,其他的监听事件都没问题,就属单击事件.

3.关于ListView 和 ExpandableListView这种列表控件

Java代码

  
 
 
 
  1. @Override   

  2.         public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {   

  3.             ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo;   

  4.             int type = ExpandableListView.getPackedPositionType(info.packedPosition);   

  5.             if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {   

  6.                 String title = ((TextView) info.targetView.findViewById(R.id.groupName)).getText().toString();   

  7.                 menu.setHeaderTitle(title);   

  8.                 menu.add(0, MENU_GROUP_ADD, 0, "添加分组");   

  9.                 menu.add(0, MENU_GROUP_DELETE, 0, "删除分组");   

  10.                 menu.add(0, MENU_GROUP_MODIFY, 0, "重命名");   

  11.                 menu.add(0, MENU_GROUP_ADDCONTACT, 0, "添加联系人");   

  12.             } else if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {   

  13.                 String title = ((TextView) info.targetView.findViewById(R.id.chats_view_name)).getText().toString();   

  14.                 menu.setHeaderTitle(title);menu.add(0, MENU_CONTACTS_DELETE, 0, "删除联系人");   

  15.                 menu.add(0, MENU_CONTACTS_MODIFY, 0, "编辑联系人");   

  16.                 menu.add(0, MENU_CONTACTS_MOVE, 0, "移动联系人到...");}   

  17.             }   

  18.         @Override   

  19.         public boolean onContextItemSelected(MenuItem item) {   

  20.             ExpandableListContextMenuInfo menuInfo = (ExpandableListContextMenuInfo) item.getMenuInfo();   

  21.             int type = ExpandableListView.getPackedPositionType(menuInfo.packedPosition);   

  22.             if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {   

  23.                 String groupName = ((TextView) menuInfo.targetView.findViewById(R.id.groupName)).getText().toString();   

  24.                 Log.i(TAG, groupName);   

  25.                 switch (item.getItemId()) {   

  26.                     case MENU_GROUP_ADD:break;   

  27.                     case MENU_GROUP_DELETE:break;   

  28.                     case MENU_GROUP_MODIFY:break;   

  29.                     case MENU_GROUP_ADDCONTACT:break;   

  30.                 }   

  31.             } else if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {   

  32.                 String childName = ((TextView) menuInfo.targetView.findViewById(R.id.chats_view_name)).getText().toString();   

  33.                 Log.i(TAG, childName);   

  34.                 switch (item.getItemId()) {   

  35.                     case MENU_CONTACTS_DELETE:break;   

  36.                     case MENU_CONTACTS_MODIFY:break;   

  37.                     case MENU_CONTACTS_MOVE:break;   

  38.                 }   

  39.             }   

  40.             return true;   

  41.         }  

如果需要给group或者child 加上个长按事件

这样写了,没反应,需要将实列注册给监听器

Java代码

  
 
 
 
  1. ExpandableListView mElv = (ExpandableListView) findViewById(android.R.id.list);registerForContextMenu(mElv);    

另外需要提到一点的是,我在项目里注册了长按事件,同时group下的child也有个onClick()事件,这时候,onClick()事件无效

需要给child增加单击事件

Java代码

  
 
 
 
  1. mElv.setOnChildClickListener(mChildClickListener);// 注册group下的item的点击事件   

  2. OnChildClickListener mChildClickListener = new OnChildClickListener() {   

  3. @Override   

  4. public boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {   

  5. // TODO Auto-generated method stub   

  6. Intent intent = new Intent();   

  7. intent.setClass(Main.this, ChatActivity.class);   

  8. startActivity(intent);   

  9. return false;   

  10. }   

  11. };  

> 今天发现 想要将列表控件中间的分割符去掉,可以通过android:divider="@null"来设置.

别走开 ,下页继续深入分析

#p#

4.让控件显示在底部(不是界面上的底部),也就是从底部开始显示,可以采用android:layout_gravity="bottom",该控件不能放在相对布局里,否则没效果

5.想做出个跟CSS里的Float效果,可以采用RelativeLayout的嵌套,在子RelativeLayout里设置android:layout_alignParentRight="true"等一系列属性.

6.ListView中如何使用Button,让onClick和onItemClick事件共存,可以在布局文件里,将这个Button添加个android:focusable="false"属性

7.EditText控件,让光标停在字符最後

Java代码

  
 
 
 
  1. EditText inputField = new EditText(this);   

  2. Editable eText = inputField.getText();   

  3. int position = eText.length();   

  4. Selection.setSelection(eText, position); 

8.让控件均匀分布,整齐的排列

Java代码

  
 
 
 
  1.                 android:layout_width="fill_parent" android:layout_height="50dip"   

  2.                 android:orientation="horizontal" android:visibility="gone">   

  3.                 

  4.                     android:layout_height="wrap_content" android:layout_weight="1.0"   

  5.                     android:layout_gravity="center_vertical">   

  6.                     

  7.                         android:layout_width="wrap_content" android:layout_height="wrap_content"   

  8. android:background="@drawable/chat_history_button"   

  9.                         android:layout_centerInParent="true" />   

  10.                    

  11.                 

  12.                     android:layout_height="wrap_content" android:layout_weight="1.0"   

  13.                     android:layout_gravity="center_vertical">   

  14.                     

  15.                         android:layout_height="wrap_content" android:background="@drawable/widget_qq"   

  16.                         android:layout_centerInParent="true" />   

  17.                    

  18.                 

  19.                     android:layout_height="wrap_content" android:layout_weight="1.0"   

  20.                     android:layout_gravity="center_vertical">   

  21.                     

  22.                         android:layout_width="wrap_content" android:layout_height="wrap_content"   

  23.                         android:background="@drawable/back_btn"   

  24.                         android:layout_centerInParent="true" />   

  25.                    

  26.               

 9.有时候发现你界面上有个EditText控件,真机上进入这个界面,会获得焦点,然后弹出一个软键盘出来,可以做如下处理,将焦点给转移. 

Java代码

  
 
 
 
  1.    
  2.     
  3.         android:focusableInTouchMode="true" android:layout_height="0px"   
  4.         android:layout_width="0px">   
  5.       

10.控制软件盘的显示与隐藏

Java代码

  
 
 
 
  1. /**  
  2.      * 控制软键盘的显示与隐藏  
  3.      */   
  4.     private void opSoftInput(View view, boolean hasFocus){   
  5.         if(hasFocus){   
  6. putMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(view, 0);   
  7.         } else {    
  8. putMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);    
  9.         }   
  10.     }   

11.上次写了篇关于TextView里解析包含图片的博客,这次去弄了下EditText中,点击表情,将表情图片添加到EditText (类似QQ表情的发送吧)

呵呵,中间走了点弯路,开始是将EditText中的内容拿去解析,还用了正则去匹配,结果失败,

SpannableString类的setSpan(Object what, int start, int end, int flags)

我采用map保存了表情,

看下当时写的重写的EditText的setText()方法

Java代码

  
 
 
 
  1. @Override   
  2.         public void setText(CharSequence text, BufferType type) {   
  3.             // TODO Auto-generated method stub   
  4.             initFaceMap();   
  5.             // 需要处理的文本   
  6.             SpannableString spannable = new SpannableString(text.toString());   
  7.             if (text != null && faceMap != null) {   
  8.                 // 对表情符以img标记进行修饰,改用drawable显示出来   
  9.                 Set keys = faceMap.keySet();   
  10.                 for (String key : keys) {   
  11.                     if (text.toString().contains(key)) {   
  12.                         Drawable drawable = getResources().getDrawable(faceMap.get(key));    
  13.                         drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());   
  14.                         //要让图片替代指定的文字就要用ImageSpan   
  15.                         ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);      
  16.                         int start = text.toString().indexOf(key);   
  17.                         spannable.setSpan(span, start, start + key.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);   
  18.                     }   
  19.                 }   
  20.             }   
  21.             super.setText(spannable, type);   
  22.         }  

这样写,如果有输入相同的表情,则只有第一个显示正常,后续的都是字符,因为我只遍历了一遍map,而且是替换了一遍.

下面是简单方法(需要在布局文件里给每个表情按钮添加一个tag属性,展示的是表情,实质内容还是tag的文本,方便接收方的解析)

Java代码

  
 
 
 
  1. /** 聊天表情图片监听器 */   
  2.  
  3.     private OnClickListener faceImageButtonListener = new OnClickListener() {   
  4.         @Override   
  5.         public void onClick(View v) {   
  6.             // TODO Auto-generated method stub     
  7.             ImageButton imageButton = (ImageButton) v;   
  8.             String emotionTag = imageButton.getTag().toString();   
  9.             int cursor = content.getSelectionEnd();   
  10.             content.getText().insert(cursor, emotionTag);   
  11.             SpannableString spannable = new SpannableString(content.getText());   
  12.             Drawable draw = imageButton.getDrawable();   
  13.             ImageSpan span = new ImageSpan(draw, ImageSpan.ALIGN_BASELINE);   
  14.             // 下面flags参数换成Spannable.SPAN_INCLUSIVE_EXCLUSIVE,会导致添加了表情后,无法删除表情,也无法输入字符   
  15.             spannable.setSpan(span, cursor, cursor + emotionTag.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   
  16.             content.setText(spannable);   
  17.             Editable eText = content.getText();    
  18.             Selection.setSelection(eText, content.getText().length());// 控制光标显示在字符最后   
  19.         }   
  20.     }; 

最后贴上效果图

分享文章:Android基本概念小整理(二)
分享链接:http://www.csdahua.cn/qtweb/news21/394721.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网