textview的属性?android:attr/

?意味着你引用类型属性,?android:attr/listPreferredItemHeight意味着你用android命名空间内的listPreferredItemHeight这种属性。总的来说就是说给layout_height指定系统预定义的一个属性值。

?android:attr/textAppearanceLargeInverse //系统自带的一个外观

?表示系统是否有这种外观,否则使用默认的外观。 可选值:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse

  •  textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下划线
  • textView.getPaint().setAntiAlias(true);//抗锯齿
  • textview.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG); //中划线
  • setFlags(Paint. STRIKE_THRU_TEXT_FLAG|Paint.ANTI_ALIAS_FLAG);  // 设置中划线并加清晰
  • textView.getPaint().setFlags(0);  // 取消设置的的划线

android:drawablePadding

android:drawablePadding设置text与drawable(图片)的间隔,与drawableLeft、 drawableRight、drawableTop、drawableBottom一起使用,可设置为负数,单独使用没有效果。 android:drawablePadding 给上下左右的图片加间隔

setCompoundDrawablesWithIntrinsicBounds

TextView也可以直接绑定一个drawable对象显示的

  • void  setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom) 或
  • void  setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom) // int类型指定的资源id,方位则是textview什么位置显示drawable对象, 如left = Resource identifier of the left Drawable. 相当于:android:drawableLeft: The drawable to be drawn to the left of the text.
  • void  setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)

setCompoundDrawables(Drawable left, top, right, bottom)

  • 画的drawable的宽高是按drawable.setBound()设置的宽高,所以使用之前必须使用Drawable.setBounds设置Drawable的长宽, The Drawables must already have had setBounds(Rect) called
    •  Drawable d1 = rr.getCompoundDrawables()[1];  //此处取的是android:drawableTop的图片
      drawable.setBounds(0, 0, d1.getIntrinsicWidth(), d1.getIntrinsicHeight());//  getIntrinsicWidth()取得的是Drawable在手机上的宽度,所以不同分辨率下获取到的值是不同的,关键所在处
  • setCompoundDrawablesWithIntrinsicBoundsdrawable画的宽高是按drawable固定的宽高,即通过getIntrinsicWidth()与getIntrinsicHeight()获得,The Drawables’ bounds will be set to their intrinsic bounds
  • 要想达到相同效果: 自定义zoomDrawable()

Drawable draw1 = this.getResources().getDrawable(R.drawable.srvmng);

int w = draw1.getIntrinsicWidth();    

        int h = draw1.getIntrinsicHeight();    

Rect rect = draw1.getBounds();

text1.setCompoundDrawablesWithIntrinsicBounds(null, zoomDrawable(draw1,32,32), null,null);

<TextView
android:id=”@+id/item1″
android:layout_width=”fill_parent”
android:layout_height=”40.0dip”
android:layout_alignLeft=”@+id/scenic_icon”
android:layout_below=”@+id/consume”
android:layout_marginTop=”10dp”
android:background=”@drawable/scenic_details_item_bg”
android:drawableLeft=”@drawable/sight_1
android:drawablePadding=”10.0dip”
android:drawableRight=”@drawable/back_light
android:gravity=”center_vertical”
android:padding=”10.0dip”
android:text=”景区地图自动导游”
android:textColor=”@color/grey_textcolor” />

让TextView后面的Layout响应Click事件

有一个Layout(LinearLayout或者RelativeLayout)作为背景,他有一个TextView作为子元素,当点击TextView控件时,想让它所在的Layout响应。这个问题其实有两个解决方法:

  • 在它的父Layout中声明clickable为true: 这种方法判断长按事件有时候会失效

<TextView
android:id=”@+id/my_recent_voice_edit”
android:layout_width=”148.3dp”
android:layout_height=”wrap_content”
android:duplicateParentState=”true”
android:gravity=”center”
android:text=”@string/voice_recent_btn_text”
android:textColor=”@color/textviewcolor
android:layout_marginBottom=”1dp”
android:clickable=”true” //可点击
android:textSize=”12sp” />

  • 屏蔽Layout的子元素获取焦点。后一种方法中不能为TextView指定selector了

<LinearLayout
android:id=”@+id/voice_recent_edit_layout”
android:layout_width=”193.3dp”
android:layout_height=”wrap_content”
android:layout_marginLeft=”33dp”
android:layout_marginRight=”33dp”
android:background=”@drawable/recent_voice_bg”
  android:clickable=”true”
            android:descendantFocusability=”blocksDescendants”
android:gravity=”center_vertical”
android:visibility=”gone” >

定义颜色res/color/textviewcolor.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<selector xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:state_selected=”true” android:color=”#ff0000″ />
<item android:state_focused=”true” android:color=”#ff0000″ />
<item android:state_pressed=”true” android:color=”#ff0000″ />
<item android:color=”#89683B” />
</selector>

E.G.

image imageimage

三个按钮是三个TextView派生类实例,中间的白线,是1px宽的白色矩形:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"

android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@drawable/background_color">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="10dip" />
<LinearLayout android:layout_width="fill_parent"
android:layout_height="40dip">

<com.easymorse.textbutton.TextButton
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_weight="1" android:text="电影" android:gravity="center_vertical|center_horizontal"
android:background="@drawable/button" android:focusable="true" android:clickable="true"/>

<View android:layout_width="2px" android:layout_height="fill_parent" android:background="#ffffffff" />

<com.easymorse.textbutton.TextButton android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true"
android:layout_weight="1" android:text="电视" android:gravity="center_vertical|center_horizontal"
android:background="@drawable/button" android:focusable="true" />

<View android:layout_width="2px" android:layout_height="fill_parent"android:background="#ffffffff" />

<com.easymorse.textbutton.TextButton android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true"
android:layout_weight="1" android:text="明星" android:gravity="center_vertical|center_horizontal"
android:background="@drawable/button" android:focusable="true" />

</LinearLayout>
</LinearLayout>

在按钮布局中要使用android:focusable=”true” android:clickable=”true”,这样才能比如通过轨迹球聚焦到按钮上,才能用手触摸按钮的时候触发事件, 点击按钮变色,主要在android:background=”@drawable/button”配置,button配置了点击事件发生后的背景色改变,而不需要编写代码

TextView中的个别字设置为超链接,或者设置个别字的颜色、字体等,那就需要用到Spannable对象

按back钮事件

按返回键时不销毁当前activity

当我们按back钮时activity会被销毁(android默认)要使按back钮后activity不被毁灭,做法就是改写Activity中的onKeyDown(),然后拦截KeyEvent.KEYCODE_BACK呼叫moveTaskToBack(true);来实现。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}

Android 捕获返回键彻底关闭应用程序

当用户点击自定义的退出按钮或返回键时(需要捕获动作),我们在onDestroy() 里强制退

onSaveInstanceState

在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

当一个Activity在PAUSE时,被kill之前,它可以调用onSaveInstanceState()来保存当前activity的状态信息(在paused状态时,要被KILLED的时候)。用来保存状态信息的Bundle会同时传给两个method,即onRestoreInstanceState() and onCreate().

解决横屏和竖屏切换带来的数据被置空或者说onCreate被重复调用问题,其实Android提供的onSaveInstanceState方法可以保存当前的窗口状态在即将布局切换前或当前Activity被推入历史栈,其实布局切换也调用过onPause所以被推入Activity的history stack,如果我们的Activity在后台没有因为运行内存吃紧被清理,则切换回时会触发onRestoreInstanceState方法。这两个方法中参数均为Bundle,可以存放类似 SharedPreferences 的数据,所以使用它们作为当前窗口的状态保存是比较合适的。

Android中如何返回上一个界面(Activity)

  • 直接返回上一个界面,保留原界面的状态,只需要将当前的activity终止即可

代码:shop.this.finish();

  • 返回数据到上一个Activity

    • startActivityForResult(Intent intent,int i); //启动下一个Activity要传送到下一个Activity的数据封装到intent中,并规定下一个Activity必须返回一个值i;
    • 运行下一个Activity,并返回int i;
    • onActivityResult(int requestCode,int ResultCode,Intent data) //返回的i值此处传给requestCode,且只有当requestCode接受到的值是规定的i时此方法才能正确执行。主调函数通过onActivityResult回调传回数据:
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       // TODO Auto-generated method stub
       switch (resultCode) {
       case RESULT_OK:
           String sex = data.getStringExtra("sex");
           if(sex.equals("M")){
              rg.check(R.id.M);
           }else
              rg.check(R.id.F);
           break;
       default:
           break;
       }
    }
Android进阶2之Activity之间数据交流(onActivityResult的用法)

startActivityForResult(Intent intent, int requestCode);

  • 第一个参数:一个Intent对象
  • 第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回

onActivityResult(int requestCode, int resultCode, Intent data)

  • 第一个参数:这个整数requestCode提供给onActivityResult,是以便确认返回的数据是从哪个Activity返回的。这个requestCode和startActivityForResult中的requestCode相对应。
  • 第二个参数:这整数resultCode是由子Activity通过其setResult()方法返回。

setResult(int resultCode, Intent data) 调用这个方法把Activity想要返回的数据返回到父Activity

  • 第一个参数:当Activity结束时resultCode将归还在onActivityResult()中,一般为RESULT_CANCELED , RESULT_OK。
  • 第二个参数:一个Intent对象,返回给父Activity的数据。

捕获返回(后退)按钮事件的两种方法

第一种方法:
public void onBackPressed() {
//code……
}

第二种方法:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){
//code……..
}
return false;
}

两种方法都定义在activity中,只要在我们自己写的activity中重写就可以了,第一种方法是后退按钮独有的,第二种方法可以根据不同的keycode来捕捉不同按钮的点击事件。补充说明:如果这两种方法同时使用了,那么当用户点击返回按钮时,程序会先调用onKeyDown方法,后调用onBackPressed方法

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

John's Weblog

Just another WordPress.com weblog

I Am That I Am

Chasing tomorrow's sunrise.