android中 TextView设置滚动条

TextView实现滚动的三种方式:

1、嵌套在ScrollView或者HorizontalScrollView中

垂直滚动:
<scrollview android:layout_width="fill_parent"
  android:layout_height="fill_parent" android:scrollbars="vertical">
   <textview android:text="http://orgcent.com …"/>
</scrollview>

水平滚动:使用标签<horizontalscrollview></horizontalscrollview>

一定要注意的是 ScrollView要放到 textView外边  才能生效地 。  

2、设置ScrollingMovementMethod
代码中添加:

TextView.setMovementMethod(new ScrollingMovementMethod());

XML中配置:

android:scrollbars="vertical"

特别要注意 2条件同时满足才能效。    

3、使用Scroller来自定义TextView
点击查看:android自定义View-垂直滚动的TextView



如果需要删除TextView的 滚动条 可以 设置ScrollView 的xml的属性 android:scrollbars="none"



android 返回布局View

话说xml布局就是view?不理解:

 三种方式可以生成LayoutInflater:
LayoutInflater inflater=LayoutInflater.from(this);
LayoutInflater inflater=getLayoutInflater();
LayoutInflater inflater=(LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);

 

然后调用inflate方法将xml布局文件转成View
  
public View inflate(intresource,ViewGrouproot,booleanattachToRoot)
//在View类中,也有inflate方法
public static View inflate(Contextcontext,intresource,ViewGrouproot)

android控制软键盘弹出或者隐藏

在程序中加入以下代码时,软键盘会出现:

InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.RESULT_SHOWN);
    如果要让软键盘消失,则为以下代码:
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

Android 关于数据库访问

Android 用的 数据库是Sqlite3,。

android 操作数据库和我们用其他语言操作数据库差不多。

首先取得数据库对象

SQLiteDatabase

db= SQLiteDatabase.openDatabase(MyApp.MAINACITVITY.getDatabasePath("数据库文件名").toString(),null,SQLiteDatabase.OPEN_READONLY);

然后通过db取得cursor对象 这个cursor相当于数据集 dataset

Cursor cursor=db.rawQuery("select id,name,x,y from locationInfo ", null);
MainActivity.ccsuMapAPP.startManagingCursor(cursor);//这句话要调用一次使得cursor生命周期和activity同步 但是最后要记得调用stopManagingCursor()
while(cursor.moveToNext()){
LocationTag tag=new LocationTag(MainActivity.ccsuMapAPP,this);
tag.setBaseInfo(cursor.getInt(0), cursor.getString(1), cursor.getInt(2), cursor.getInt(3));
tags.add(tag);
}

总结一下Activity.startManagingCursor方法: 转
我们将获得的Cursor对象交与Activity 来管理,这样Cursor对象的生命周期便能与当前的Activity自动同步,省去了自己管理Cursor。

1.这个方法使用的前提是:游标结果集里有很多的数据记录。
所以,在使用之前,先对Cursor是否为null进行判断,如果Cursor != null,再使用此方法

2.如果使用这个方法,最后也要用stopManagingCursor()来把它停止掉,以免出现错误。

3.使用这个方法的目的是把获取的Cursor对象交给Activity管理,这样Cursor的生命周期便能和Activity自动同步,
省去自己手动管理。

android中几个基础知识

1: 获取asset下面的文件 获得文件IO流。

( context).getResources().getAssets().open("文件名")

2: 通过流创建Bitmap对象:

BitmapFactory.decodeStream(is) 返回Bitma对象,获取后要记得关闭

3:通过流直接获取Drawab

Bitmap b=new BitmapDrawable(is)

Bitmap Config 参数


Bitmap.Config ALPHA_8
Bitmap.Config ARGB_4444
Bitmap.Config ARGB_8888
Bitmap.Config RGB_565
A  R  G  B
透明度 红色 绿色 蓝色
Bitmap.Config ARGB_4444 16 每个像素 占四位
Bitmap.Config ARGB_8888 32 每个像素 占八位
Bitmap.Config RGB_565 16 R占5位 G占6位 B占5位 没有透明度(A)
一般情况下我们都是用argb888 但是无可厚非 它也相对的很占内存
因为一个像素32位 8位一个字节 如果是800*480的图片的话自己算 估计有1M多了

4: 计算字体宽度 在canvas中

Paint p=new Paint();
p.setTextSize(24);
Rect bounds = new Rect();  
p.getTextBounds(str,0, str.length(), bounds);  
int width = bounds.width();

1.  什么是density

引用
1) density
density表示每英寸有多少个显示点(逻辑值),它的单位是dpi:dot per inch,通常屏幕大时,density就大,屏幕小时,density就小,通常
屏幕实际分辨率为240px*400px时,density=120
屏幕实际分辨率为320px*533px,density=160
屏幕实际分辨率为480px*800px,density=240

2)  分辨率
是整个屏是多少点,比如800×480,它是软件的显示单位

3) 从Android1.6版本开始支持density(对应API Level 4)
用于解决应用在屏幕大小不同的硬件上正常显示的问题

2. 相关代码及设置

引用
1)         AndroidManifest.xml

这个参数在API Level 4也就是SDK 1.6以后才启用的,而且1.6版本的API Level 4的应用默认值就是True

2) 资源目录名(android 2.0以后)
res/xxx-hdpi         当density为240时,使用此目录下的资源
res/xxx-mdpi        当density为160时,使用此目录下的资源
res/xxx-ldpi          当density为120时,使用此目录下的资源
res/xxx                 不常后缀,为默认设置,同xxx-mdpi

3) 资源单位(xml文件中定义大小的单位)

a)  dp=dip=dx (Density independent pixel)
基于屏幕密度的抽象单位,设备无关的点,用于说明与密度无关的尺寸和位置。这些单位是相对于一个160dpi的屏幕,所有一个dp是160dpi屏幕上的一个点。

b)  px
px指软件的单位点,设备相关的点

c)  具体使用

i.布局时尽量使用单位dip,少使用px
若使用px,如果设某控件大小400x400px,在800×480上显示正常,而在533×320的屏上就超出屏幕了
若使用dp,如果设某控件大小为160x160dp,就可以通过从系统中取density来算出真正的大小,比如在800×480屏的density设为240,而533×320屏的density设为160,借以下公式计算
pixels = dips * (density / 160)
在800×480在屏中显示240象素,而在533×320的屏中显示为160象素,控件在屏中显示的比例是一样的。

ii. 内部的处理过程分为三步:
取screen中其它元素,转为应用的值,计算应用各控件位置,然后再转成800×480以供真正显示
若res-xxx不存在,则读取res有的资源,然后对其做相应缩放

3. 实现density的关键源码

引用
1)         BitmapFactory.java(用于缩放图片)

2)         ComptibilityInfo.java(用于位置计算)

4、取得屏幕信息(宽高等)

Java代码  收藏代码
  1. public static String getDisplayMetrics(Context cx) {  

  2.  String str = "";  

  3.  DisplayMetrics dm = new DisplayMetrics();  

  4.  dm = cx.getApplicationContext().getResources().getDisplayMetrics();  

  5.  int screenWidth = dm.widthPixels;  

  6.  int screenHeight = dm.heightPixels;  

  7.  float density = dm.density;  

  8.  float xdpi = dm.xdpi;  

  9.  float ydpi = dm.ydpi;  

  10.  str += "The absolute width:" + String.valueOf(screenWidth) + "pixelsn";  

  11.  str += "The absolute heightin:" + String.valueOf(screenHeight)  

  12.      + "pixelsn";  

  13.  str += "The logical density of the display.:" + String.valueOf(density)  

  14.      + "n";  

  15.  str += "X dimension :" + String.valueOf(xdpi) + "pixels per inchn";  

  16.  str += "Y dimension :" + String.valueOf(ydpi) + "pixels per inchn";  

  17.  return str;  

  18. }  

5 取得状态栏和标题栏高度

Java代码  收藏代码
  1. TextView tv1;  

  2.  

  3. @Override  

  4. protected void onCreate(Bundle savedInstanceState) {  

  5.  super.onCreate(savedInstanceState);  

  6.  setContentView(R.layout.layout_test2);  

  7.  tv1 = (TextView) findViewById(R.id.TextView01);  

  8.  tv1.post(new Runnable(){  

  9.    public void run()  

  10.    {  

  11.      processLayout();  

  12.    }  

  13.  });  

  14. }  

  15.  

  16. private void processLayout(){  

  17.    

  18.  Rect rect= new Rect();  

  19.  Window window= getWindow();  

  20.  tv1.getWindowVisibleDisplayFrame(rect);  

  21.  //状态栏高度  

  22.  int statusBarHeight= rect.top;  

  23.  int contentViewTop= window.findViewById(Window.ID_ANDROID_CONTENT).getTop();  

  24.  //标题栏高度  

  25.  int titleBarHeight= contentViewTop – statusBarHeight;  

  26.  //测试结果:ok之后 100多 ms 才运行了  

  27.  Log.v("test", "=-init-= statusBarHeight="+statusBarHeight+  

  28.  " contentViewTop="+contentViewTop+  

  29.  " titleBarHeight="+titleBarHeight);      

  30.  

  31. }