2010년 11월 19일 금요일

TextView 한글의 Bold 처리


text.setText("한글 볼드 테스트"); 
text.setPaintFlags(text.getPaintFlags() | Paint.FAKE_BOLD_TEXT_FLAG);

2010년 11월 18일 목요일

스크롤바 없애기

android:scrollbars="@null"

2010년 11월 11일 목요일

단말의 DIP, WIDTH, HEIGHT 값 구하기

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);

density = displaymetrics.densityDpi;
width = displaymetrics.widthPixels;
height = displaymetrics.heightPixels;

2010년 11월 1일 월요일

Bitmap <--> Drawable

[Bitmap to Drawable]
BitmapDrawable bitmapDrawable = (BitmapDrawable)bitmap;
Drawable drawable = (Drawable)bitmapDrawable;

Bitmap bitmap = new Bitmap (...);
Drawable drawable = new BitmapDrawable(bitmap);

[Drawable to Bitmap] 
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
d.setBounds(0, 0, w, h);
d.draw(canvas);

2010년 10월 22일 금요일

tile background 방법

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/MainLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/backrepeat">


/res/drawable/backrepeat.xml 생성한다.


<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/back" 
android:tileMode="repeat" />

2010년 10월 13일 수요일

스크롤 관련

1. 스크롤 버튼 : setFastScrollEnabled(true)
2. 스크롤 할때만 나타나게 하기 : android:fadeScrollbars="true"
3. 스크롤 이미지 변경 
    android:scrollbarThumbVertical="@drawable/..."
    android:scrollbarThumbHorizontal="@drawable/..."
4. 스크롤의 background
    android:scrollbarTrackVertical="@drawable/..."
    android:scrollbarTrackHorizontal="@drawable/..."

2010년 8월 2일 월요일

TextView의 텍스트 간격 넓히기(자간 간격)

android:lineSpacingExtra  : 라인의 간격을 더하기로 계산 Text의 height + LineSpacing
android:lineSpacingMultiplier : 라인의 간격을 곱하기로 계산 Text의 height * LineSpacing

[android:lineSpacingExtra]


Extra spacing between lines of text.
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), in (inches), mm (millimeters).
This may also be a reference to a resource (in the form "@[package:]type:name") or theme attribute (in the form "?[package:][type:]name") containing a value of this type.
This corresponds to the global attribute resource symbol lineSpacingExtra.

[android:lineSpacingMultiplier]


Extra spacing between lines of text, as a multiplier.
Must be a floating point value, such as "1.2".
This may also be a reference to a resource (in the form "@[package:]type:name") or theme attribute (in the form "?[package:][type:]name") containing a value of this type.
This corresponds to the global attribute resource symbol lineSpacingMultiplier.

2010년 7월 13일 화요일

Logcat 콘솔 출력시 한글 나타나게 하는 법

1. cmd 실행
2. cmd /u
3. chcp 65001
4. 속성 -> 글꼴 -> Lucida Console 변경
5. adb logcat 실행

2010년 5월 25일 화요일

중간 Activity 날리기

1depth : A, D
2depth : B
3depth : C

일 때

1) A -> B -> C -> D
2) D에서 back키 입력하면 B,C 가 사라지고 A가 나타난다.

(1)  B 에서 C로 이동 시
B에서는
- startActivityForResult(intent, 1);
- onActivityResult 구현

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
if( requestCode == 1){
finish();
}else if( requestCode == 2){
   // 다른 Activity로 이동
   startActivity();
  }
}
}

(2) C에서 D로 이동시 startActivity 전에
Intent previousIntent = getIntent();

setResult(RESULT_OK, previousIntent);

2010년 5월 19일 수요일

Activity 화면 전환 고정

Manifest.xml 파일에 적용

- Landscape 고정
<android:screenOrientation="landscape">

-Portrait 고정
<android:screenOrientation="portrait">

2010년 5월 12일 수요일

Activity Kill Process

1.메니페스트 파일에 RESTART_PACKAGES 권한을 사용한다고 선언한다.
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>

2.ActivityManager 의 restartPackage API 를 호출한다.
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
am.restartPackage(getPackageName());

2010년 5월 10일 월요일

A 어플에서 B 어플의 C-2 Activity 실행시키기

[A 어플]

Intent intent = new Intent();
intent.setClassName("android.com.test", "android.com.test.TestActivity");
startActivity(intent);

setClassName("패키지이름", "패키지이름.클래스이름");


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


[B 어플]
B-1(main App)
B-2(Sub App)
B 어플의 Manifest.xml 내용에

<activity android:name=".TestActiviActivity" android:label="@string/app_name1">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
</intent-filter>
</activity>

B 어플의 메인 Activity인 B-1은 A어플에서 바로 startActivity로 호출되어 실행되지만, B-2의 어플에 대해서는 manifest.xml 에 위와 같이 intent filter를 적용해야 한다.

2010년 5월 7일 금요일

Text 흘러가기


android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="TEST1TEST2TEST3TEST4TEST5TEST6TEST7TEST8TEST9TEST10TEST11TEST12"


android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"

위의 xml 속성이 포인트

글씨가 왼쪽으로 흐르는 것처럼 보인다

2010년 5월 2일 일요일

화면 전환 시 Activity 재생성 막기

Manifest.xml 파일에 android:configChanges="orientation|keyboardHidden" 추가

android:screenOrientation="landscape" - 가로고정
android:screenOrientation="potrait" - 세로고정

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;
}
        });

2010년 3월 30일 화요일

tab widget background set

mTabHost = getTabHost();
mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("유료").setContent(pay_contents));
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("무료").setContent(free_contents));
           
mTabHost.getTabWidget().getChildAt(0).setLayoutParams(new LinearLayout.LayoutParams(110, 42, 1));
mTabHost.getTabWidget().getChildAt(1).setLayoutParams(new LinearLayout.LayoutParams(110, 42, 1));
           
mTabHost.setCurrentTab(0);
           
mTabHost.setOnTabChangedListener(new OnTabChangeListener(){
@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
     if( tabId == "tab1"){
mTabHost.getCurrentTabView().setBackgroundResource(R.drawable.hori_menu_recom_nor);
} else if( tabId == "tab2") {                        mTabHost.getCurrentTabView().setBackgroundResource(R.drawable.hori_menu_category_nor);
                }
            });


위와 같이 하면 탭을 누를때마다 이미지가 변경된다.

Landscape 와 Portrait 상태일 때 TextView 변경

if( getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
            tv.setText("Test");
        } else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ){
            tv.setText("Hello");
        }


가로 화면일 때는 Hello, 세로화면일 때는 Test가 보여진다.

2010년 3월 24일 수요일

android:stackFromBottom="true"

ListView의 xml에서 android:stackFromBottom="true"

새로운 것이 추가되면 제일 아래로 이동됨

2010년 3월 22일 월요일

가로 & 세로 화면 처리

가로 & 세로 화면 변경시 처리하는 코드

public void onConfigurationChanged(Configuration newConfig) {
   super.onConfigurationChanged(newConfig);
          
   if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { // 슬라이드 닫힐때
    
   } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 슬라이드 열릴때
  
   }
}

2010년 2월 10일 수요일

ImageButton의 투명효과

ImageButton의 이미지를 설정하면
버튼 모양에 이미지가 가운데에 보이는데


android:background="#a0000000" 를 설정하면 버튼모양이 나타나지 않게 된다.

2010년 1월 27일 수요일

[Android] ListView에서 마지막 아이템 확인

리스트뷰에서 아래방향으로 flicking 중 리스트의 마지막 아이템에 도달했는지 확인하는 코드


lv.setOnScrollListener(new OnScrollListener(){    @Override
    public void onScroll(AbsListView view, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int state) {
        // TODO Auto-generated method stub
        if(state == OnScrollListener.SCROLL_STATE_IDLE) {
            if( view.getLastVisiblePosition() == adapter.getCount()-1 ){
                Toast.makeText(ContentsListView.this, "리스트 마지막임", Toast.LENGTH_SHORT).show();
                data = new ListData[count];
                for(int i = 0 ; i < count; i++){
                    data[i] = new ListData();
                    mData.add(data[i]);
                }
               
                adapter.notifyDataSetChanged();
            }
        }
    }           
});

[Android] 탭의 사이즈 줄이기







위의 그림처럼 탭의 사이즈를 줄이는 방법입니다.

탭을 생성한 후

mTabHost.getTabWidget().getChildAt(0).setLayoutParams(new LinearLayout.LayoutParams(100, 30, 1));

width와 height 값을 설정하고 마지막 1은 weight를 나타낸다


아래는 API 설명이다.

public LinearLayout.LayoutParams (int width, int height, float weight)

Since: API Level 1
Creates a new set of layout parameters with the specified width, height and weight.
Parameters
width
the width, either FILL_PARENT, WRAP_CONTENT or a fixed size in pixels
height
the height, either FILL_PARENT, WRAP_CONTENT or a fixed size in pixels
weight
the weight

[Android] 구분선 그리기

View와 View 사이에 구분선을 그리고 싶다면

<View android:layout_width="fill_parent" android:layout_height="2dip" android:background="#FFFFFFFF" />

xml에 위의 코드를 삽입하면 된다.

[Android] ListView에서 text가 화면을 넘어갈 경우 처리 방법























위의 그림처럼 List에 text의 글자가 화면의 width를 넘어갈 경우 text 마지막 부분에 ... 으로 처리하는 방법은
TextView의 xml의 속성값을 추가해주시면 됩니다.

android:ellipsize="end"
android:singleLine="true"

[Android] Button 가운데 정렬

android:gravity="center_vertical|center_horizontal"
android:layout_gravity="center_vertical|center_horizontal|center"

xml에 이 두 줄을 추가하면 안드로이 화면 가운데에 위치하게 된다.