* 해당 확장 리스트는 기본 레이어를 이용하여 만든 것입니다.
* 만들게 된이유는 디자인을 자유롭게 적용하기 위해서입니다.
* 단발성으로 만들어서 패키지화는 시키지 않은 상태입니다.
** 패키지화를 하면은 다시 디자인 적용시키는게 불편할거 같은 이유로 안했습니다.
* 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 + " <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 -->
-------------------------생략---------------------------------
'ANDROID의 속삭임' 카테고리의 다른 글
[android][TIP]가중치로 레이아웃 구성후 에디터텍스트의 자판으로 화면 일그러짐. (0) | 2013.11.11 |
---|---|
[android][로그인][구상도] 안드로이드 어플리케이션 로그인 구상 (0) | 2013.10.23 |
[android][TIP]외부 어플리케이션 실행. (0) | 2013.10.23 |
[android][기초]페이지 이동 (0) | 2013.09.27 |
[android][Notification]통지 등록및 통지유틸 (0) | 2013.09.25 |