안드로이드2018. 8. 1. 11:42

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>
  <!-- ... -->


- 실제 화면


Posted by 홍규홍규