6. 각각의 게시글에 대한 레이아웃 작성하기 - listview.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="50dp"
android:layout_marginBottom="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/title"
android:layout_width="250dp"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:textColor="#666"
android:paddingLeft="20dp"
android:text=""
android:textSize="15dp"/>
<TextView
android:id="@+id/date"
android:layout_width="90dp"
android:layout_height="match_parent"
android:gravity="center|right"
android:textColor="#999"
android:text=""
android:textSize="13dp"/>
</LinearLayout>
</LinearLayout>
7. Adapter 클래스 생성
public class BoardAdapter extends BaseAdapter {
private Context context;
private List<Board> boardList;
public BoardAdapter(List<Board> boardList) {
this.boardList = boardList;
}
@Override
public int getCount() {
return boardList.size();
}
@Override
public Object getItem(int i) {
return boardList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
final int pos = i; // ListView 위치(첫 번째 = 0)
context = viewGroup.getContext();
if(view == null) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(inflater != null)
view = inflater.inflate(R.layout.listview, viewGroup, false);
}
TextView title = view.findViewById(R.id.title),
date = view.findViewById(R.id.date);
Board board = boardList.get(i);
title.setText(board.getTitle());
date.setText(board.getCreateDate());
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 게시글 터치 시 내용 보여주는 다이얼로그 띄우기
showContent(boardList.get(pos).getTitle(), boardList.get(pos).getContent());
}
});
return view;
}
private void showContent(String title, String content) {
final Dialog dialog = Util.getCustomDialog(context, R.layout.content_dialog);
// 8-9번 참고
dialog.setCancelable(false);
dialog.show();
TextView dTitle = dialog.findViewById(R.id.dialog_title),
dContent = dialog.findViewById(R.id.dialog_content);
ImageView dClose = dialog.findViewById(R.id.dialog_close_img);
Button bClose = dialog.findViewById(R.id.dialog_close);
dTitle.setText(title);
dContent.setText(content);
dContent.setMovementMethod(new ScrollingMovementMethod());
dClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
bClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
}
}
8. 내용을 보여줄 커스텀 다이얼로그 레이아웃 작성
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:background="@drawable/custom_dialog_bg"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/dialog_title"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="6dp"
android:padding="7dp"
android:text=""
android:textColor="#666"
android:textSize="14dp" />
<ImageView
android:id="@+id/dialog_close_img"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:contentDescription="@null"
android:src="@drawable/btn_close" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#EEE" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/dialog_content"
android:layout_width="match_parent"
android:layout_height="290dp"
android:lineSpacingExtra="4dp"
android:padding="10dp"
android:scrollbars="vertical"
android:scrollbarSize="3dp"
android:text=""
android:textColor="#555"
android:textSize="14dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_dialog_close"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/dialog_close"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_gravity="center"
android:background="@drawable/btn_style_blue"
android:text="@string/name_close"
android:textColor="#FFF"
android:textSize="16dp" />
</LinearLayout>
</LinearLayout>
- 화면은 아래와 같다.
9. Util.getCustomDialog 작성
public class Util {
// ...
public static Dialog getCustomDialog(Context context, int layout) {
Dialog dialog = new Dialog(context, R.style.FullHeightDialog);
dialog.setContentView(layout);
return dialog;
}
// ...
}
※ FullHeightDialog - styles.xml
<!-- ... -->
<style name="FullHeightDialog" parent="android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
<!-- ... -->
- 실제 화면
'안드로이드' 카테고리의 다른 글
drawable 경로를 문자열로 가져오기 (0) | 2018.10.26 |
---|---|
vibrate() is deprecated (0) | 2018.08.16 |
Volley 사용하여 게시판 리스트 가져와서 출력하기 2/3 (0) | 2018.08.01 |
Volley 사용하여 게시판 리스트 가져와서 출력하기 1/3 (0) | 2018.08.01 |
프래그먼트 사용 시 주의사항 (0) | 2018.07.24 |