본문 바로가기

ANDROID의 속삭임

[android][extendList] 확장리스트


* 해당 확장 리스트는 기본 레이어를 이용하여 만든 것입니다.

* 만들게 된이유는 디자인을 자유롭게 적용하기 위해서입니다.

* 단발성으로 만들어서 패키지화는 시키지 않은 상태입니다.

** 패키지화를 하면은 다시 디자인 적용시키는게 불편할거 같은 이유로 안했습니다.




* java 

** 중간중간에 내가 개발한 프레임 워크의 소스가 섞여있다. 그러니 주의해서 사용한다.

package com................................;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;


import android.os.Bundle;

import android.text.Html;

import android.view.Gravity;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import android.widget.TextView;


import com.onv.esmartbill.IndexActivity;

import com.onv.esmartbill.R;

import com.onv.esmartbill.thisbill.ThisMonthBillHist;

import com.onv.framework.activity.BaseActivity;

import com.onv.framework.util.StringUtil;


public class BillBoxActivity extends BaseActivity {


private int rowSize = 55;

private int onRowSize = 95;

private int leftMarginSize = 40;

private int rightMarginSize = 5;

private List<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   chActivity(this);

   setContentView(R.layout.activity_bill_box);

   

   ImageView backView = (ImageView)findViewById(R.id.btn_backView);

   backView.setOnClickListener(new OnClickListener() 

           { 

               public void onClick(View v)  

               { 

                changePage( IndexActivity.class );

               } 

           } 

       ); 

   

   changeQuickBtn(4);

   showProgress(false, findViewById(R.id.layoutForm),  findViewById(R.id.processForm));

   

   settingExtendDataMap("2013년 10월", "10000000", "Y", "2013년 10월 12일", "신한은행", "*9710" );

   settingExtendDataMap("2013년 9월", "10000000", "Y", "2013년 9월 11일", "신한은행", "*9710" );

   settingExtendDataMap("2013년 8월", "100", "N", "2013년 8월 12일", "신한은행", "*9710" );

   settingExtendDataMap("2013년 7월", "25900", "N", "2013년 7월 12일", "신한은행", "*9710" );

   settingExtendDataMap("2013년 6월", "36700", "Y", "2013년 6월 12일", "신한은행", "*9710" );

   settingExtendDataMap("2013년 5월", "10000000", "N", "2013년 5월 12일", "신한은행", "*9710" );

   settingExtendDataMap("2013년 4월", "58700", "Y", "2013년 4월 12일", "신한은행", "*9710" );

   settingExtendDataMap("2013년 3월", "10000000", "N", "2013년 3월 12일", "신한은행", "*9710" );

   extendList();

   

  

}


public void settingExtendDataMap(String BILL_DATE, String BILL_MONEY, String PAY_YN, String PAY_DATE, String PAY_BANK, String PAY_ADDR ){

HashMap<String, String> map = new HashMap<String, String>();

   

map.put("BILL_DATE", BILL_DATE);

   map.put("BILL_MONEY", BILL_MONEY);

   map.put("PAY_YN", PAY_YN);

   map.put("PAY_DATE", PAY_DATE);

   map.put("PAY_BANK", PAY_BANK);

   map.put("PAY_ADDR", PAY_ADDR);

   dataList.add(map);

 

}

/**

* <h2> 데이터 셋팅</h2>

* 구조화된 데이터를 받아서 리스트를 형성한다.

* @param dataList

*

*/

public void extendList(){

LinearLayout extendList = (LinearLayout)findViewById(R.id.extendList);

for(int i = 0; i < dataList.size(); i++ ){

/*

* 로우 바탕이미지 셋팅 S

*/

LinearLayout row = new LinearLayout(this);

row.setId(i);

row.setOrientation(LinearLayout.HORIZONTAL);

if( i == 0 ){

row.setBackgroundResource(R.drawable.ivory);

}else{

if( (i % 2) == 0 )

row.setBackgroundResource(R.drawable.ivory_dotted);

else 

row.setBackgroundResource(R.drawable.blue_dotted);

}

LinearLayout.LayoutParams rowParm = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, getDpToPx(rowSize));

extendList.addView(row,rowParm);

/*

* 로우 바탕이미지 셋팅 S

*/

row.setOnClickListener(new OnClickListener() 

           { 

               public void onClick(View v)  

               { 

                rowOn(v.getId());

               } 

           } 

       ); 

rowDataSetting(row, false, row.getId());

}

}

/**

* <h2> 리스트가 선택관리</h2>

* 리스트가 선택되면 해당 줄을 확장하고, 확장된 리스트를 복원한다.

* @param id

*

*/

public void rowOn(int id ){

LinearLayout row = (LinearLayout)findViewById(id);

row.removeAllViews();

row.setLayoutParams( new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, getDpToPx(onRowSize)));

row.setOrientation(LinearLayout.VERTICAL);

LinearLayout layer1 = new LinearLayout(this);

layer1.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, getDpToPx(rowSize)));

if( id == 0 ){

layer1.setBackgroundResource(R.drawable.ivory);

}else{

if( (id % 2) == 0 )

layer1.setBackgroundResource(R.drawable.ivory_dotted);

else 

layer1.setBackgroundResource(R.drawable.blue_dotted);

}

rowDataSetting(layer1, true, id);

LinearLayout layer2 = new LinearLayout(this);

layer2.setBackgroundResource(R.drawable.gray_bg);

rowDataSetting(layer2, id);

row.addView(layer1);

row.addView(layer2);

row.setOnClickListener(new OnClickListener() 

       { 

           public void onClick(View v)  

           { 

            rowOff(-1 );

           } 

       } 

); 

rowOff( id );

}

/**

* <h2> 로우 크로스</h2>

* 리스트가 선택된 로우를 제외하고 모두 닫는다.

* @param id

*

*/

public void rowOff(int id ){

for( int i = 0; i < dataList.size(); i++){

if( id != i ){//선택된 로우는 제외한다.

/*

* 로우 바탕이미지 셋팅 S

*/

LinearLayout row =  (LinearLayout)findViewById(i);

if ( row.getOrientation() == LinearLayout.VERTICAL ){

row.removeAllViews();

row.setOrientation(LinearLayout.HORIZONTAL);

if( i == 0 ){

row.setBackgroundResource(R.drawable.ivory);

}else{

if( (i % 2) == 0 )

row.setBackgroundResource(R.drawable.ivory_dotted);

else 

row.setBackgroundResource(R.drawable.blue_dotted);

}

LinearLayout.LayoutParams rowParm = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, getDpToPx(rowSize));

row.setLayoutParams(rowParm);

/*

* 로우 바탕이미지 셋팅 S

*/

row.setOnClickListener(new OnClickListener() 

           { 

               public void onClick(View v)  

               { 

                rowOn(v.getId());

               } 

           } 

       ); 

rowDataSetting(row, false, row.getId());

}

}

}

}

/**

* <h2> 메인(1Layer) 줄에 데이터를 셋팅한다. </h2>

* @param row

* @param on

* @param rowid

*

*/

public void rowDataSetting(LinearLayout row, boolean on, int id){

String fontColorHeard = "";

String fontColorTail = "";

//메인 타이틀 제목 레이아웃 추가

LinearLayout.LayoutParams mainTitleParm = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

RelativeLayout mainTitle = new RelativeLayout(this);

mainTitle.setPadding(getDpToPx(leftMarginSize), 0, getDpToPx(rightMarginSize), 0);

row.addView( mainTitle, mainTitleParm );

//왼쪽 제목 레이아웃 추가

LinearLayout leftTitle = new LinearLayout(this);

RelativeLayout.LayoutParams leftTitleParm = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.MATCH_PARENT);

leftTitleParm.addRule(  RelativeLayout.ALIGN_PARENT_LEFT );

leftTitle.setOrientation(LinearLayout.HORIZONTAL);

mainTitle.addView( leftTitle, leftTitleParm );

//오른쪽 제목 레이아웃 추가.

LinearLayout rightTitle = new LinearLayout(this);

RelativeLayout.LayoutParams rightTitleParm = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.MATCH_PARENT);

rightTitleParm.addRule(  RelativeLayout.ALIGN_PARENT_RIGHT );

rightTitle.setOrientation(LinearLayout.HORIZONTAL);

mainTitle.addView( rightTitle, rightTitleParm );

/*

* 왼쪽 제목 레이아웃 데이터 셋팅 S

*/

//왼쪽 타이틀 아이콘 셋팅

LinearLayout.LayoutParams viewParm = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);

viewParm.gravity = Gravity.CENTER;

ImageView catalog = new ImageView(this);

catalog.setLayoutParams(viewParm);

if(on){

catalog.setImageResource(R.drawable.catalog_on);

fontColorHeard = "<font color=\"#007dcb\">";

fontColorTail = "</font>";

}else{

catalog.setImageResource(R.drawable.catalog_off);

}

leftTitle.addView(catalog);

//왼쪽 날짜 텍스트 세팅

TextView leftText = new TextView(this);

leftText.setText( Html.fromHtml( fontColorHeard + "&nbsp;<strong>" + (dataList.get(id)).get("BILL_DATE") + "</strong>" + fontColorTail ) );

leftText.setGravity(Gravity.CENTER);

leftText.setTextAppearance(this, R.style.BaseFontStyle);

changeFont(leftText);

leftTitle.addView(leftText,viewParm);

/*

* 왼쪽 제목 레이아웃 데이터 셋팅 E

*/

/*

* 오른쪽 제목 레이아웃 데이터 셋팅 S

*/

//오른쪽 날짜 텍스트 세팅

TextView rightText = new TextView(this);

rightText.setText( Html.fromHtml( fontColorHeard + "<strong>₩" + StringUtil.getCommaNum((dataList.get(id)).get("BILL_MONEY")) + getResources().getString( R.string.money_base ) +"</strong>" + fontColorTail ) );

rightText.setGravity(Gravity.CENTER);

rightText.setTextAppearance(this, R.style.BaseFontStyle);

changeFont(rightText);

rightTitle.addView(rightText,viewParm);

//오른쪽 다음 아이콘 셋팅

ImageView next = new ImageView(this);

next.setLayoutParams(viewParm);

if(on){

next.setImageResource(R.drawable.next_on);

}else{

next.setImageResource(R.drawable.next_off);

}

next.setTag( ( dataList.get(id) ).get("BILL_DATE") );

next.setOnClickListener(new OnClickListener() 

       { 

           public void onClick(View v){ 

           

            HashMap<String,String> data = new HashMap<String,String>();

            data.put("BILL_DATE", String.valueOf(v.getTag()));

           

            changePage(ThisMonthBillHist.class, data);

           } 

       } 

   ); 

rightTitle.addView(next);

/*

* 오른쪽 제목 레이아웃 데이터 셋팅 E

*/

}

/**

* <h2>서브(2Layer) 줄에 데이터를 셋팅한다. </h2>

*

* @param row

* @param rowId

*

*/

public void rowDataSetting(LinearLayout row, int id){

//서브 타이틀 제목 레이아웃 추가

LinearLayout.LayoutParams subTitleParm = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

LinearLayout subTitle = new LinearLayout(this);

subTitle.setPadding(0, 0, 0, 0);

subTitle.setGravity(Gravity.CENTER);

row.addView( subTitle, subTitleParm );

/*

* 서브 타이틀 레이아웃에 컨텐츠 채우기 S

*/

//아이콘 추가

LinearLayout.LayoutParams viewParm = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);

ImageView bullet = new ImageView(this);

bullet.setImageResource(R.drawable.graybg_bullet);

subTitle.addView(bullet, viewParm);

// 표시할 내용 추가

TextView subText = new TextView(this);

subText.setText( Html.fromHtml("<strong>" + (dataList.get(id)).get("PAY_DATE") + " " + 

                                                             (dataList.get(id)).get("PAY_BANK") + " " + 

                                                     (dataList.get(id)).get("PAY_ADDR") + " " + 

                                                             ("Y".equals(dataList.get(id).get("PAY_YN")) ? "<font color=\"green\">정상출금</font>" : "<font color=\"red\">미출금</font>") +  

                                            "</strong>") );

subText.setGravity(Gravity.CENTER_VERTICAL);

subText.setTextAppearance(this, R.style.BaseSmallFontStyle);

changeFont(subText);

subTitle.addView(subText, viewParm);


ImageView checkPay = new ImageView(this);

if("Y".equals(dataList.get(id).get("PAY_YN"))){

checkPay.setImageResource(R.drawable.ok);

}else{

checkPay.setImageResource(R.drawable.no);

}

subTitle.addView(checkPay, viewParm);

/*

* 서브 타이틀 레이아웃에 컨텐츠 채우기 E

*/

}

}



* Activity

  -------------------------생략---------------------------------

<!-- 컨텐츠 영역 S -->

   <ScrollView

       android:id="@+id/scrollView1"

       android:layout_width="match_parent"

       android:layout_height="0dp"

       android:layout_weight="14.5"

       android:background="@drawable/bill_bg_patten_xml" >


       <LinearLayout

           android:id="@+id/extendList"

           android:layout_width="match_parent"

           android:layout_height="wrap_content"

           android:orientation="vertical" >

       </LinearLayout>

    

   </ScrollView>

<!-- 컨텐츠 영역 E -->

  -------------------------생략---------------------------------