소스 다운받는곳

https://github.com/tlshenm/SearchToolbarTest


----------------------------------------------------------CODE-------------------------------------------------

 

SearchActivity


 

public class SearchActivity extends AppCompatActivity {

private NoticeRecyclerAdapter mAdapter;
private NoticeContent mNoticeContent;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

private void initView() {
getIntentDate();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.notice_search_recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new NoticeRecyclerAdapter(this, mNoticeContent.getNoticeList()); //new NoticeRecyclerAdapter(Context, 당신의 데이터 리스트)
recyclerView.setAdapter(mAdapter);
}

private void getIntentDate(){
Intent intent = getIntent();
mNoticeContent =(NoticeContent)intent.getExtras().getSerializable(NoticeContent.NOTICE_CONTENT);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

SearchManager searchManager = (SearchManager) this.getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) findViewById(R.id.notice_search_view);
searchView.onActionViewExpanded(); //바로 검색 할 수 있도록

if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(this.getComponentName()));
searchView.setQueryHint(getString(R.string.notice_search_hint));
queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
Log.i("onQueryTextChange", newText);

mAdapter.setFilter(filter(mNoticeContent.getNoticeList(), newText));
return true;
}

@Override
public boolean onQueryTextSubmit(String query) {
Log.i("onQueryTextSubmit", query);

return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
}

return true;
}


private List<NoticeItem> filter(List<NoticeItem> noticeListItem, String query) {
query = query.toLowerCase();

final List<NoticeItem> filteredNoticeList = new ArrayList<>();
if (query != null && !query.equals("")) {
for (NoticeItem model : noticeListItem) {
final String title = model.getTitle().toLowerCase();
final String name = model.getName().toLowerCase();
if (title.contains(query)) {
filteredNoticeList.add(model);
}else if(name.contains(query)){
filteredNoticeList.add(model);
}
}
}
return filteredNoticeList;
}

}

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

 

NoticeRecyclerAdapter

 

public class NoticeRecyclerAdapter extends RecyclerView.Adapter<NoticeRecyclerAdapter.ViewHolder> {

private final List<NoticeItem> mValues;
private Context mContext = null;

public NoticeRecyclerAdapter(Context context, List<NoticeItem> items) {
this.mContext = context;
mValues = items;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.notice_item, parent, false);
return new ViewHolder(view);
}


@Override
public int getItemCount() {
return mValues.size();
}

//이부분 중요!! 검색 리스트를 나오게하기 위해 꼭 필요
public void setFilter(List<NoticeItem> items) {
mValues.clear();
mValues.addAll(items);
notifyDataSetChanged();
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.mItem = mValues.get(position);
holder.mTitleText.setText(mValues.get(position).getTitle());
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}


public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public final TextView mTitleText;

public NoticeItem mItem;

public ViewHolder(View view) {
super(view);
mView = view;
mTitleText = (TextView) view.findViewById(R.id.notice_item_title);
}
}
}

 


 

----------------------------------------------------------XML---------------------------------------------------

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">




<android.support.v7.widget.Toolbar
android:id="@+id/notice_search_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_alignParentTop="true"
android:background="@color/white_color"
android:elevation="5dp"
app:contentInsetStartWithNavigation="0dp">




<android.support.v7.widget.SearchView
android:id="@+id/notice_search_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>


</android.support.v7.widget.Toolbar>



<android.support.v7.widget.RecyclerView
android:id="@+id/notice_search_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/notice_search_toolbar"/>



</RelativeLayout>


 

 


728x90
반응형

'Android' 카테고리의 다른 글

RecyclerView 만들기  (0) 2016.11.14
Activity와 Fragment간 데이터 전달  (0) 2016.11.14
android SHA1 알아내기  (0) 2016.10.19
Android TextView Line 가져오기  (0) 2016.09.21
안드로이드 StatusBar 높이 알아내기  (0) 2016.07.08
흔히 googleApi를 사용하기 전에 sha-1지문이 필요한데요


window에서는 Android studio를 설치 한뒤


Windows

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android


Android studio 터미널에서 위에 지문을 입력해주면 되는데요


저 같은경우에는 debug.keystore의 경로를 찾아내서 다음과 같이 입력했습니다.


keytool -list -v -keystore C:/Users/Administrator/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android




위와 같은 과정을 거치면 SHA-1이 똬악~~!



OS X, Linux

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android



728x90
반응형
int android.widget.TextView.getLineCount()


Return the number of lines of text, or 0 if the internal Layout has not been built.
-내부 레이아웃이 내장되어 있지 않은 경우,텍스트 줄의 수를 돌려줍니다


getLineCount()메서드로 Parent View가 넓어지거나 줄어들어도 해당 메서드로 TextView글자 라인수를 가져 올 수 있습니다.


예를들어
--------------------------------------------------------------------------------------------------
String text = “가나다라마바사아자차카타파아야ABCDEFGHIJKLMNOPdfsgdsdfefsdfsdf.”

exTextView.setMaxLine(2);    //최대 라인 수 정의
 
exTextView.setText(text);        
-------------------------------------------------------------------------------------------------
위 코드를 실행했을때 만약 상위 뷰가 작아서 “”까지 밖에 보여줄 수 밖에  없을 경우
가나다라마바사
아자차카타파...
 
getLineCount()를 쓰면 “”이후 “...”으로 생략된 데이터까지 포함해서 라인 수를 가져옵니다

가나다라마바사
아자차카타파아
야ABCDEFGHIJ
KLMNOPdfsgd

sdfefsdfsdf


exTextView의 라인수 = 5를 가져옵니다.

728x90
반응형


public static int getStatusBarHeight(Context context) {

   int result = 0;

   int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");

   if (resourceId > 0) {

       result = context.getResources().getDimensionPixelSize(resourceId);

   }

   return result;

}

728x90
반응형

'Android' 카테고리의 다른 글

android SHA1 알아내기  (0) 2016.10.19
Android TextView Line 가져오기  (0) 2016.09.21
안드로이드 코드에서 마진 주기  (0) 2016.06.22
안드로이드 Px to Dip  (0) 2016.06.22
안드로이드 스크린 사이즈 가져오기  (0) 2016.06.22

----------------------------------------------------------CODE--------------------------------------------------------------


ImageView line1 = (ImageView)mBase.findViewById(R.id.month_line1);


//상위 뷰가 <LinearLayout>이기 때문에 LinearLayout.LayoutParams을 사용한다
// mLine1.getLayoutParams(); == mLine1의 기존 레이아웃 파라미터를 가져온다.

LinearLayout.LayoutParams liControl1 = (LinearLayout.LayoutParams) mLine1.getLayoutParams();    

  liControl1.setMargins(0, height, 0, 0);    // liControl1객체로 width와 hight등 파라미터를 다 설정가능

  mLine1.setLayoutParams(liControl1);

   
----------------------------------------------------------XML--------------------------------------------------------------


<LinearLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_marginTop="21dp"

        android:orientation="vertical" >

        <ImageView

            style="@style/sch_style_Img_MonthLine"

            android:layout_marginTop="1dp" />


        <ImageView

            android:id="@+id/month_line1"

            style="@style/sch_style_Img_MonthLine"

          />



    </LinearLayout>






728x90
반응형

private int convertPx(int size) {

return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, size, getResources().getDisplayMetrics());

}

private int convertDip(int size) {

return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, size, getResources().getDisplayMetrics());

}



728x90
반응형

public static int SCREEN_WIDTH = 0;

public static int SCREEN_HEIGHT = 0;


/**

* 소프트키를 포함한 화면 전체해상도를 가져온다.

* @param context

*/

public static void setScreenInfo(Context context){

if(Build.VERSION.SDK_INT>=14)

{

android.view.Display display = ((WindowManager) context.getSystemService(context.WINDOW_SERVICE)).getDefaultDisplay();

Point realSize = new Point();

try {

Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

SCREEN_WIDTH=realSize.x;

SCREEN_HEIGHT=realSize.y;

}else{

DisplayMetrics dmath=context.getResources().getDisplayMetrics(); // 화면의 가로,세로 길이를 구할 때 사용합니다.

SCREEN_WIDTH=dmath.widthPixels;

SCREEN_HEIGHT=dmath.heightPixels;

}

}


/**

* 소프트키를 미포함한 화면 전체해상도를 가져온다.

* @param context

*/

public static void setNoSoftKeyScreenInfo(Context context){

DisplayMetrics dmath=context.getResources().getDisplayMetrics(); // 화면의 가로,세로 길이를 구할 때 사용합니다.

SCREEN_WIDTH=dmath.widthPixels;

SCREEN_HEIGHT=dmath.heightPixels;

}


/**

* 소프트키 존재 여부를 가져온다.

* @param context

*/

public static boolean isScreenSoftKey(Context context) {

boolean isKey = false;

if (Build.VERSION.SDK_INT >= 14) {

boolean hasMenuKey = ViewConfiguration.get(context)

.hasPermanentMenuKey();

boolean hasBackKey = KeyCharacterMap

.deviceHasKey(KeyEvent.KEYCODE_BACK);


if (!hasMenuKey && !hasBackKey) {

isKey = true;

} else {

isKey = false;

}

} else {

isKey = false;

}

return isKey;

}

728x90
반응형

'Android' 카테고리의 다른 글

안드로이드 코드에서 마진 주기  (0) 2016.06.22
안드로이드 Px to Dip  (0) 2016.06.22
안드로이드 리스트 뷰 만들기  (0) 2016.01.25
버튼 Press 정의  (0) 2016.01.12
안드로이드 Menu 객체 만들기  (0) 2016.01.05



뷰홀더를 사용한 리스트뷰를 간단히 만들었습니다. 해당소스는 버튼을 누르면 리스트 뷰에 데이터가 들어가는 동작을 합니다.

MainActivity.java

package com.example.shinseongil.testlist;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    private ListView mListView;
    private Button mButton;
    private ArrayList mTestArr; // 데이터 ArrayList
    private MainAdapter mMainAdapter; // 어댑터 클래스
    private boolean mIsInitAdapter = false; //어댑터 초기화 여부
    private int mNumber; //리스트에 표시하는 숫자

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButton = (Button) findViewById(R.id.test_btn);
        mListView = (ListView) findViewById(R.id.test_list);
        mTestArr = new ArrayList<>();
        mMainAdapter = new MainAdapter(this);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                initData();
                initList();
            }
        });

    }

    private void initList(){
        if (!mIsInitAdapter) {
            mListView.setAdapter(mMainAdapter);
        } else {
            mMainAdapter.notifyDataSetChanged();
        }
    }


    /**
     * 데이터 초기화
     */
    private void initData() {
        for (int i = 0; i < 10; i++) {
            TestData testData = new TestData();
            testData.id = mNumber;
            testData.name = "테스트" + mNumber;
            testData.date = "" + new Date().getTime();
            mTestArr.add(testData);
            mNumber++;
        }
    }

    private class MainAdapter extends BaseAdapter {
        private Context mContext;
        LayoutInflater mInflater;

        public MainAdapter(Context context) {
            this.mContext = context;
            mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return mTestArr.size();
        }

        @Override
        public Object getItem(int position) {
            return mTestArr.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TestViewHolder testViewHolder;

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.test_list_item, null);
                testViewHolder = new TestViewHolder();
                testViewHolder.testId = (TextView) convertView.findViewById(R.id.test_list_id);
                testViewHolder.testName = (TextView) convertView.findViewById(R.id.test_list_name);
                testViewHolder.testDate = (TextView) convertView.findViewById(R.id.test_list_date);
                convertView.setTag(testViewHolder);
            } else {
                testViewHolder = (TestViewHolder) convertView.getTag();

            }
            testViewHolder.testId.setText("" + mTestArr.get(position).id);
            testViewHolder.testName.setText(mTestArr.get(position).name);
            testViewHolder.testDate.setText(mTestArr.get(position).date);

            return convertView;
        }
    }

    /**
     * 홀더 클래스
     */
    public class TestViewHolder {
        public TextView testId;
        public TextView testName;
        public TextView testDate;
    }

    /**
     * Data 클래스
     */
    public class TestData {
        int id;
        String name;
        String date;
    }
}


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.shinseongil.testlist.MainActivity">

<Button
android:id="@+id/test_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Touch Button"
/>

<ListView
android:id="@+id/test_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/test_btn" />
</RelativeLayout>


test_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
android:id="@+id/test_list_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

android:text="New Text" />

<TextView
android:id="@+id/test_list_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text" />

<TextView
android:id="@+id/test_list_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text" />
</LinearLayout>





728x90
반응형

+ Recent posts