2010년 4월 26일 월요일

TabWidget에서 Custom Tab 만들기


AndroidLinearLayout 으로 mytabwidget.xml 생성


<xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">

  android:id="@+id/icon"
  android:src="@drawable/icon"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center" />

  android:id="@+id/text"
  android:text="Caption"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center" />

------------------------------------------

TabHost mTabHost = getTabHost();


// Custom View for TabWidget
LayoutInflater layout = getLayoutInflater();


View vTab1 = layout.inflate( R.layout.mytabwidget, null );
View vTab2 = layout.inflate( R.layout.mytabwidget, null );


ImageView icon = (ImageView) vTab1.findViewById(R.id.icon);
ImageView icon = (ImageView) vTab2.findViewById(R.id.icon);


mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator(vTab1).setContent(intent));
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator(vTab2).setContent(intent));



위와 같이 LayoutInflater로 View를 생성하고 setIndicator 메소드의 매개변수로 view를 사용하면 기존 안드로이드 탭 모양이 아닌 해당 LayoutInflater로 생성한 View 모양의 tab 화면이 나타난다.


탭을 클릭하여 이미지나 텍스트를 변경하고자 할 때에는 setOnTabChangedListener 를 사용한다.


2010년 4월 18일 일요일

Network BroadCast Receiver

public void onReceiver(Context context, Intent intent){
  String action = intent.getAction();

  if( action.equals(ConnectivityManager.CONNECTIVITY_ACTION){
     //네트워크 상태가 변경될 때마다 이쪽으로 들어온다
  }
}

네트워크 상태 알아오기

1. manifest에 permission 정의
android.permission.ACCESS_NETWORK

2. ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if( mobile.isConnected() || wifi.isConnected() ){
   //한 군데라도 연결되어 있는 경우
   return true;
} else {
  //네트웍 연결되어 있지 않은 경우
  return false
}

2010년 4월 8일 목요일

network Timeout setting

HttpParams params = new BasicHttpParams();
httppost.addHeader(".............");
HttpConnectionParams.setConnectionTimeout(params, timeoutConnection);
HttpConnectionParams.setSoTimeout(params, timeoutSocket);
HttpClient httpclient = new DefaultHttpClient(params);

2010년 4월 6일 화요일

ScrollBar 안보이게 하기

scroll.setEnabled(false);
scroll.setFocusable(false);
scroll.setHorizontalScrollBarEnabled(false);
scroll.setVerticalScrollBarEnabled(false);

ScrollView Touch Event Check

ScrollView sv = (ScrollView)findViewById(R.id.ss_scroll);
sv.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int x = (int)event.getX();
int y = (int)event.getY();
System.out.println("x: " + x + ", y: " + y);
return false;
}
});

2010년 4월 5일 월요일

Android Layout 치수

[안드로이드 치수]
px: pixel 10px는 정확히 10픽셀. 스크린 픽셀의 실제 크기와 밀도와 상관없다
QVGA (320x240)에서 10px는 높이의 1/24를 차지. VGA(640x480)은 10px는 1/64를 차지.

dip, dp: device-independent pixel. 실제 픽셀 크기와 밀도에 따른 변활르 막기 위한 단위.
이는 dip dot independent pixel이라고도 부른다. 안드로이드는 160dpi 화면에 나타나는 것과
똑같은 크기로 그 개체의 크기를 확대/축소 할 수 있다.
예로 해상도가 640x480, 크기 4x3인치라면 픽셀 밀도는 160dpi므로 10dp 객체는 10px 그대로 보인다.
그러나 640x480이고 8x6화면은 밀도가 80dpi므로 10dp 개체가 10px짜리 객체보다 두배크다.
안드로이드가 dp를 확대하거나 축소하는 스케일은 정확친 않고 대략 맞출 뿐이다.

sp: sclaed pixcel. dp와 비슷, 문자열과 같이 밀도 스케이이 정확해야 하는 개체의 크기를 정할 때 사용
pts: points.텍스트 에디터 처럼 문자의 크기를 포인트로 정할 때 사용 포인트는 1포인트 1/72인치.
in: inches
mm: millimeters

[안드로이드 색 지정]
#으로 시작해 16진수로 표현한 네 개의 8비트 정수로 끝나는 값.
Alpha: 투명도, FF는 불투명, 00은 100% 투명
Red: 빨강의 강도. FF~00
Green: FF~00
Blue:

출처 : http://www.androidpub.com/100165

2010년 4월 1일 목요일

soft keyboard 관련

[키보드 보이기]
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, 0);

[키보드 숨기기]
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, 0);


InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindowToken(), 0);

[Done Key or Enter Key Press 확인]
edt = (EditText)findViewById(R.id.edittext);
        edt.setOnEditorActionListener(new OnEditorActionListener(){
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// TODO Auto-generated method stub
if ((actionId == EditorInfo.IME_ACTION_DONE) || // Virtual KeyPad의 Done key
(event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
Toast.makeText(ListExample.this, "Done Key or Enter key Press", Toast.LENGTH_SHORT).show();
 }
return false;
}
        });