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