마스터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일 질문

답변 달기

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