마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

레이아웃 그리기 질문이요

0 추천

현재 레이아웃 ROW수가 7인데 이걸 6개로 줄이고 싶은데 

첨부된 소스에서 public void createViewItem( ) 이쪽에 값을 수정 못하겠어요 소스가 어떻게 구성되어있는지 분석도 어렵고..

7줄인걸 6줄로 어떻게 줄이죠 ?

원본 소스는 달력 구성이 다음과 같이 되어있는데 이걸  월, 화, 수, 목, 금, 토, 일을 떼고 1  월|  2  화|  3  수| ..... 이런식으로

바꾸고 싶은데  어떻게 해야되죠 ??? 설명이나 주석도 달아주시면 감사하겠습니다 ㅠㅠ

참고로 소스가 길어서 레이아웃 구성하는 부분만 소스 넣었습니다!

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

월  |  화  |  수  |  목  |  금  |  토  |  일  |

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

1   |   2   |   3  |   4   |   5    |  6  |   7  |

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

8   |  9   |  10  | 11  |  12  |  13 | 14  |

public class gsCalendar extends Activity 
{
    
	Context m_context ;				/// context 
	
	LinearLayout m_targetLayout ;	/// 달력을 넣을 레이아웃
	Button [] m_controlBtn ;		/// 달력 컨트롤할 버튼 4개 [전년도, 다음년도, 전달, 다음달]
	TextView [] m_viewTv ;			/// 년 월 일 표시할 텍스트뷰 3개[년, 월 , 일]
	Calendar m_Calendar ;			/// 사용할 달력
	LinearLayout [ ] m_lineLy ;		/// 7라인 요일표시 + 최대 6주
    LinearLayout [ ] m_cellLy ;		/// 7칸
    TextView [ ] m_cellTextBtn ;	/// 각 칸마다 넣을 텍스트뷰 (버튼처럼 이벤트 주려고 Btn 이라 붙였음)
    								/// 사실 버튼으로 하고싶은데 버튼에 텍스트 넣으면 죽어도 상하좌우 여백이 들어가서
    								/// 텍스트가 짤려서 TextView로 만들 수 밖에 없음
    LinearLayout [ ] m_horizontalLine ; /// 경계선 라인 가로
    LinearLayout [ ] m_verticalLine ;	/// 경계선 라인 세로
    int m_startPos ;				/// 요일을 찍기 시작 할 위치
    int m_lastDay ;					/// 그 달의 마지막날
    int m_selDay ;					/// 현재 선택된 날짜
    float m_displayScale ;			/// 화면 사이즈에 따른 텍스트 크기 보정값 저장용
    float m_textSize ;				/// 텍스트 사이즈(위 라인의 변수와 곱해짐)
    float m_topTextSize ;			/// 요일텍스트 사이즈(역시 보정값과 곱해짐)
    int m_tcHeight = 50 ;			/// 요일 들어가는 부분 한칸의 높이
    int m_cWidth = 50 ;				/// 한칸의 넓이
    int m_cHeight = 50 ;			/// 한칸의 높이
    int m_lineSize = 1 ;			/// 경계선의 굵기
   
    /// 상단에 표시하는 요일 텍스트
    String [] m_dayText ={ "일", "월", "화", "수", "목", "금", "토" } ; 
    Button m_preYearBtn ;			/// 전년도 버튼
    Button m_nextYearBtn ;			/// 다음년도 버튼
    Button m_preMonthBtn ;			/// 전월 버튼
    Button m_nextMonthBtn ;			/// 다음월 버튼
    TextView m_yearTv ;				/// 년 표시용 텍스트
    TextView m_mothTv ;				/// 월 표시용 텍스트
    TextView m_dayTv ;				/// 날짜 표시용 텍스트
    
    /// 생성자
	public gsCalendar( Context context, LinearLayout layout )
	{
		/// context저장
		m_context = context ;
		/// 타겟 레이아웃 저장
		m_targetLayout = layout ;
		/// 오늘 잘짜로 달력 생성
		m_Calendar = Calendar.getInstance( ) ;
		/// 표시할 각각의 레이어 생성
		m_lineLy = new LinearLayout[ 7 ] ;
        m_cellLy = new LinearLayout[ 7 * 7 ] ;
        m_cellTextBtn = new TextView[ 7 * 7 ] ;
        m_horizontalLine = new LinearLayout[ 6 ] ;
        m_verticalLine = new LinearLayout[ 6 * 7 ] ;
        
        /// 화면의 크기에 따른 보정값
        m_displayScale = context.getResources( ).getDisplayMetrics( ).density ;
        
        
        m_topTextSize = m_displayScale * 12.0f ;
        //m_textSize = m_displayScale * 12.0f ;
        m_textSize = 10;
	}
	
	public void setCalendarSize( int width, int height  )
	{
		m_cWidth = ( width - ( m_lineSize * 6 ) ) / 7 ;
        m_cHeight = ( height - ( m_lineSize * 6 ) ) / 7 ;
        m_tcHeight = ( height - ( m_lineSize * 6 ) ) / 7 ;
	}
	
	/// 레이아웃과 버튼 그리고 경계션으로 쓸 라인용 레이아웃들을 생성한다.
	public void createViewItem( )
	{
        for( int i = 0 ; i < 13 ; i++ )
        {
        	if( i % 2 == 0 )
        	{
	        	m_lineLy[i/2] = new LinearLayout( m_context ) ;
	        	m_targetLayout.addView( m_lineLy[i/2] ) ;
        	
	        	for( int j = 0 ; j < 13 ; j++ )
	        	{
	        		
	        		
	        		if( j % 2 == 0 )
		        	{
	        			int pos = ( ( i / 2 ) * 7 ) + ( j / 2 ) ;
	        			
	        			Log.d( "pos1", "" +  pos ) ;
		        		m_cellLy[ pos ] = new LinearLayout( m_context ) ;
		        		m_cellTextBtn[ pos ] = new TextView( m_context ) ;
		        		m_lineLy[ i / 2 ].addView( m_cellLy[ pos ] ) ;
		        		m_cellLy[ pos ].addView( m_cellTextBtn[ pos ] ) ;
		        		
		        	}
	        		else
	        		{
	        			int pos = ( ( i / 2 ) * 6 ) + ( j - 1 ) / 2 ;
	        			
	        			Log.d( "pos2", "" +  pos ) ;
	        			m_verticalLine[ pos ] = new LinearLayout( m_context ) ;
		        		m_lineLy[ i / 2 ].addView( m_verticalLine[ pos ] ) ;
	        		}
	        	}
        	}
        	else
        	{
        		m_horizontalLine[ ( i - 1 ) / 2 ] = new LinearLayout( m_context ) ;
	        	m_targetLayout.addView( m_horizontalLine[ ( i - 1 ) / 2 ] ) ;
	        	
	        	
        	}
        }
	}
	/// 레이아웃과 버튼의 배경색, 글씨색 등 ViewParams를 셋팅
	public void setLayoutParams( )
	{
		/// 메인 레이아웃은 세로로 나열
		m_targetLayout.setOrientation( LinearLayout.VERTICAL ) ;
		/// 만약 전체 배경이 있으면 넣어줌
		if( m_bgImgId != null )
		{
			m_targetLayout.setBackgroundDrawable( m_bgImgId ) ;
		}
		
		for( int i = 0 ; i < 13 ; i++ )
		{
			if( i % 2 == 0 )
        	{
				/// 각 라인을 구성하는 레이아웃들은 가로로 나열~
				m_lineLy[i/2].setOrientation( LinearLayout.HORIZONTAL ) ;
				m_lineLy[i/2].setLayoutParams(	/// 레이아웃 사이즈는 warp_content로 설정 
						new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT ) ) ;
	        	
				/// 한칸한칸 옵션을 설정
	        	for( int j = 0 ; j < 7 ; j++ )
	        	{
	        		int cellnum = ( ( i / 2 ) * 7 ) + j ;
	        		/// 한칸한칸을 구성하는 레이아웃 사이즈는 역시 wrap_content로 설정 
	        		LinearLayout.LayoutParams param = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT ) ;
	        		//param.setMargins( 1, 1, 1, 1 ) ;	/// 마진을 1씩 줘서 라인을 그린다.
	        		m_cellLy[ cellnum ].setLayoutParams( param ) ;
	        		/// 한칸한칸 들어가는 버튼
	        		m_cellTextBtn[ cellnum ].setGravity( Gravity.LEFT ) ;
	        		
	        		
	        		/// 이하는 배경색 글씨색 글씨 크기 설정하는 부분
	        		
	        		
	        		/// 첫라인은 월화수목금토일 표시하는 부분
	        		if( i == 0 )	
	        		{
	        			/// 요일 표시하는 부분의 넓이 높이
	        			m_cellTextBtn[ cellnum ].setLayoutParams( new LinearLayout.LayoutParams( m_cWidth, m_tcHeight ) ) ;
	 
	            		/// 글씨 크기
	            		m_cellTextBtn[ cellnum ].setTextSize( m_topTextSize ) ;
	        		}
	        		else			/// 이하는 날짜 표시하는 부분
	        		{
	        		
	        			/// 숫자 표시되는 부분의 넓이와 높이
	        			m_cellTextBtn[ cellnum ].setLayoutParams( new LinearLayout.LayoutParams( m_cWidth, m_cHeight ) ) ;
	      
	        			}
	
	public void setLineParam( )
	{
		for( int i = 0 ; i < 6 ; i ++ )
		{
			m_horizontalLine[ i ].setBackgroundColor( m_colorParam.m_lineColor ) ;	/// 라인색
			m_horizontalLine[ i ].setLayoutParams(	/// 가로 라인이니까 가로는 꽉 세로는 두께만큼 
						new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, m_lineSize ) ) ;
		}
		for( int i = 0 ; i < 7 ; i ++ )
		{
			for( int j = 0 ; j < 6 ; j++ )
	    	{
	    		int pos = ( i * 6 ) + j ;
	    		m_verticalLine[ pos ].setBackgroundColor( m_colorParam.m_lineColor ) ; /// 라인색
	    		m_verticalLine[ pos ].setLayoutParams(	/// 세로 라인이니까 세로는 쭉~ 가로는 두께만큼 
						new LinearLayout.LayoutParams( m_lineSize, LayoutParams.FILL_PARENT ) ) ;
	    	}
		}
	}
}

 

익명사용자 님이 2014년 12월 26일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...