2014년 10월 21일 화요일

[ android ] searchview 사용하기.



res/menu/activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/menu_search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/ic_action_search"
        android:orderInCategory="1"
        android:showAsAction="always"
        android:title="@string/menu_search"/>
</menu>



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.activity_main, menu); // 옵션메뉴 지정.
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
            searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
            searchView.setQueryHint("두 자 이상 입력하세요");            
            searchView.setOnQueryTextListener(queryTextListener);
            SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
            if(null!=searchManager ) {   
                searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
            }
              // 검색필드를 항상 표시하고싶을 경우false, 아이콘으로 보이고 싶을 경우 true
            searchView.setIconifiedByDefault(true);
        }
        return;
    }
    private OnQueryTextListener queryTextListener = new OnQueryTextListener() {
        @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
        @Override
        public boolean onQueryTextSubmit(String query) {
            InputMethodManager imm= (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
            searchView.setQuery("", false);
            searchView.setIconified(true);
            Toast.makeText(getActivity(), "search 결과", Toast.LENGTH_LONG).show();
            return false;
        }
        @Override
        public boolean onQueryTextChange(String newText) {
            // TODO Auto-generated method stub
            return false;
        }
    };










2014년 10월 14일 화요일

[android] viewPager setOffscreenPageLimit 미리 로딩하기


viewpager를 사용할 때 이전 혹은 다음페이지를 몇개까지 미리 로딩할지 정하는 함수이다.
전체 5page가 있는데 현재 1page를 보고 있다고 가정했을 때  2, 3, 4, 5페이지를 모두 미리 로딩하고 싶다면 setOffscreenPageLimit(4)를 사용하면 된다.

따로 setOffscreenPageLimit 를 지정하지 않았을 경우, default값은 1이다.

다음과 같이 적용가능 하다.
1
2
3
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(storePagerAdapter);
        mViewPager.setOffscreenPageLimit(4);

2014년 10월 7일 화요일

[android] 뒤로가기 버튼, actionbar Navigating Up with the App Icon

액션바에서 그림과 같이 appicon 옆에 있는 뒤로가기 버튼을 생성하고 싶다면 setDisplayHomeAsUpEnabled(true);  추가.





1
2
3
4
5
6
7
8
9
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    ...
}

[ android ] actionbar 하단에 표시

manifest.xml에 uiOptions="splitActionBarWhenNarrow" 추가.

이전 버전을 지원하고 싶다면 함께 추가.
<meta-data android:name="android.support.UI_OPTIONS" android:value="splitActionBarWhenNarrow" /> 

1
2
3
4
5
6
<manifest ...>
    <activity uiOptions="splitActionBarWhenNarrow" ... >
        <meta-data android:name="android.support.UI_OPTIONS"
                   android:value="splitActionBarWhenNarrow" />
    </activity>
</manifest>

2014년 3월 19일 수요일

[android] html에서 전화걸기

assets폴더아래 call.html파일

[call.html]
<a href='tel:012-345-6789'>Tel : 012-345-6789</a>

[call.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mWebView = (WebView) findViewById(R.id.callWebView);
        mWebView.setWebViewClient(new InternalWebViewClient());
        mWebView.loadUrl("file:///android_asset/call.html");
    }
    private class InternalWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
             if (url.indexOf("tel:") > -1) {
                startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(url)));
                return true;
            } else {
                return true;
            }
        }
    }

manifest에 퍼미션 추가.
1
<uses-permission android:name="android.permission.CALL_PHONE" />

위의 내용을 추가하면 전화기능이 없는 기기로 마켓에서 검색을 하면 해당앱이 검색되지 않기 때문에 아래의 내용을 추가.
android:required = false 는 꼭 필요하지는 않다는 뜻! 
즉, 전화기능이 없는 앱도 지원기기에 속하게 된다.
1
<uses-feature android:name="android.hardware.telephony" android:required="false"/>

2014년 3월 18일 화요일

[android] url scheme 사용하기 (웹에서 앱 호출 및 앱에서 앱 호출)

[호출될 앱]
다른 앱이나 웹에서 호출될 앱의 AndroidManifest.xml 파일을 열어 원하는 activity에 아래와 같이 빨간 부분을 추가 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<activity
            android:name=".testUrlScheme"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:host="호스트이름" android:scheme="스키마이름" />
            </intent-filter>
        </activity>

[testUrlScheme.java]
1
2
3
4
5
6
7
8
if(getIntent()!=null){
        Uri uri = getIntent().getData();
        if(uri != null)
        { 
            String param1 = uri.getQueryParameter("param1");
            String param2 = uri.getQueryParameter("param2");
        }
}


[앱에서 호출]
1
2
3
4
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setdata(Uri.parse("스키마://호스트?param1=test&param2=test2"));
startActivity(intent);


[웹에서 호출]
<a href="스키마://호스트?param1=test&param2=test2"> urlscheme </a>


[앱이 다시실행 될 때 호출]
1
2
3
4
5
6
7
8
@Override
    protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);
        if(intent!=null){
            Uri uri = intent.getData();
        }
    }

2014년 3월 10일 월요일

[android] 전역변수 Applicationclass 사용하기

ApplicationClass는 어디서든 접근할 수 있고 공동으로 사용할 수 있습니다.
따라서 컴포넌트 사이에서 context를 이용하여 사용합니다.


[ApplicationClass.java]

1
2
3
4
5
6
7
8
9
public class ApplicationClass extends Application{
    private boolean m_test;
    public boolean getState(){
        return m_test;
    }
    public void setState(boolean test){
        m_test = test;
    }
}


[사용하고 싶은 곳]

private ApplicationClass applicationclass;
applicationclass = (ApplicationClass)context.getApplicationContext();
applicationclass.getState();