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

안드로이드TextView,POPUPWINDOW로 스피너를 만들었는데 아이템 선택시에 정렬이 풀려버리네요.. [closed]

0 추천

처음에 그라비티 속성을 이용하면 정렬이 잘되는데 아이템을 선택하면 정렬이 바로 풀려버립니다. 

setText에 문제인거같은데 . 커스텀 된 텍스트뷰에 onClickListener을 달아서 아이템이 바뀌게 만들었는데 

바뀔때마다 정렬이 풀리네요. 분명히 정렬이 설정되어있는데도.. 코드인데 왜풀리는건지 모르겠습니다.

도와주세요 ㅠㅠ 제발

package kr.qoop.bmg_program.expendables.text;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Handler;
import android.text.InputType;
import android.text.method.ArrowKeyMovementMethod;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.ScrollView;
import android.widget.TextView;

import java.util.ArrayList;

import javax.xml.transform.sax.TemplatesHandler;

import kr.qoop.bmg_program.R;


public class HistoryText extends CTextView implements View.OnClickListener {

    private Context mContext=null;  //컨텍스트 정보
     private PopupWindow Menu=null;  //팝업 메뉴
    private ArrayList<String> ItemList = new ArrayList<String>(); //메뉴관리 어레이
    View MenuView = null;  //팝업의 뷰
    boolean isPopup=false;
    LinearLayout Menu_Linear=null;
    ScrollView RootView=null;

    public HistoryText(Context context) {
        super(context);
        this.mContext=context;
        init();
    }

    public HistoryText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext=context;
        init();

    }

    private void init(){
        this.setTextColor(Color.BLACK);
        Activity InflateActivity=(Activity)mContext;  //인플레이트 사용을 위한 액티비티 형변환
        MenuView = InflateActivity.getLayoutInflater().inflate(R.layout.popmenu,null);  //팝업 뷰를 선언.
        Menu = new PopupWindow(MenuView,getWidth(),getHeight()*ItemList.size());    //크기 설정/

        RootView = (ScrollView)MenuView.getRootView();  //팝업의 루투뷰를 가져온다 팝업은 스크롤뷰로 되어있다.
        RootView.setVerticalScrollBarEnabled(false);
        RootView.setHorizontalFadingEdgeEnabled(false);

            if(RootView.getChildAt(0) instanceof LinearLayout)  //Scroll은 단하나의 자식만 가질수있고 그자식은 LinearLayout 이다. 확인.
                Menu_Linear = (LinearLayout)RootView.getChildAt(0); //리니어를 가져온다.

        post(new Runnable() {
            @Override
            public void run() {

                Add();
                Add();
                Add();
                Add();
                Add();
                Add();
                Add();
                Add();
                Add();
                Add();
            }
        });

    }

    /**팝업을 업데이트 한다.*/
    public void Update() {
        Log.e("HistoryText|Update", "Update");
            Menu.showAsDropDown(this);

                if (ItemList.size() != 0) {//아이템 사이즈가 0이 아닐떄.

                    if (ItemList.size() < 5)   //아이템 수가 5보다 작을때.
                        Menu.update(getWidth(), getHeight() * ItemList.size());
                    else
                        Menu.update(getWidth(), getHeight()*5); //아이템수가 5개 이상 이고 처음이면 셋팅

                }else {
                    Menu.update(getWidth(), 0);  //아이템수가 0이면 안보임.
                }

                Menu.setAnimationStyle(-1); //애니메이션 설정
      }

    /**팝업을 추가한다.*/
    public void Add(){

//        if(!Overlap()) { //중복된것이 없으면.
            CTextView Item = null;    //아이템
            Item = new CTextView(mContext); //아이템 객체 연결
            Item.setLayoutParams(new LinearLayout.LayoutParams(getWidth(), getHeight()));
            Item.setOnClickListener(this);
            Item.setGravity(Gravity.CENTER);    //정렬.
            Item.setText(getSelectItem());  //아이템 이름을 정하고.
            Item.setTextColor(Color.BLACK); //글자색을 바꾸고.
            ItemList.add(getSelectItem());  //아이템을 추가시키고.
            Menu_Linear.addView(Item);
//        }
        Log.e("HistoryText|Add", "Add");
    }

    /**팝업중 중복 부분을 체크한다.*/
    public boolean Overlap(){
        boolean isOverlap=false;
        for(int i =0; i<ItemList.size(); i++){
            if(getSelectItem().replace(" ","").equals(ItemList.get(i).replace(" ",""))) //같은 아이템이 있으면 true를 반환.
                isOverlap=true;
        }
        Log.e("HistoryText|Overlap","Overlap:"+isOverlap);
        return isOverlap;
    }

    /**팝업 중 아이템을 삭제한다.*/
    public void Remove(){
        Log.e("HistoryText|Remove","Remove");
    }

    /**팝업을 전부 삭제 시킨다.*/
    public void Clear(){
        ItemList.removeAll(ItemList);   //아이템 리스트 삭제.
        Menu_Linear.removeAllViews();   //뷰 삭제.
        Log.e("HistoryText|Clear", "Clear");
    }

    /**아이템을 set한다.*/
    public void setSelectItem(String Item){
        this.setText(Item);
    }
    /**선택된 아이템을 반환한다.*/
    public String getSelectItem(){
        Log.e("HistoryText|getSelectItem","getSelectItem");
      return this.getText().toString();
    }

    /**키보드를 뛰운다.*/
    public void KBShow(){

        Log.e("HistoryText|KBShow","KBShow");
    }
    /**키보드를 내린다.*/
    public void KBdismiss(){
        Log.e("HistoryText|KBdismiss","KBdismiss");
    }

    /**메뉴를 뛰운다.*/
    public void MenuShow(){

        if(!isPopup){ //팝업 뛰우기
            this.Update();  //뷰를 업데이트 시킨다.
            Menu.showAsDropDown(this);
            this.isPopup=true;
        }else { //팝업 내리기
           Menu.dismiss();
            this.isPopup=false;
        }
    }


    @Override
    public void onClick(View v) {
        if(v instanceof CTextView) {    //아이템이 맞는지.
            CTextView Item = (CTextView)v; //아이템을 가지고
            setSelectItem(Item.getText().toString());  //선택 아이템 변경
            MenuShow(); //누르면 닫기.
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true"
    android:fadingEdge="none"
    android:background="@android:drawable/editbox_background"
    android:overScrollMode="never"
    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center"
        >
    </LinearLayout>

</ScrollView>

 

질문을 종료한 이유: 이 클레스의 문제가 아니였습니다 2틀동안 고생했는데 . 오토 스케일 TextView인 CTextView 부분에서 오류가 났더군요.. 2틀동안 답을 못찾았었는데.
익명사용자 님이 2016년 4월 19일 질문
2016년 4월 19일 closed
...