我是Android开发的新手。我创建了一个我希望在活动中的片段中显示的视图。
以下是我的观点摘录:
public class CalendarView extends View implements View.OnTouchListener {
@Override
protected void onDraw(Canvas canvas) {
displayTitleDate(canvas);
displayNavigation(canvas);
displayDays(canvas);
displayNumbers(canvas);
highlightRect(canvas);
invalidate();
}
}
以下是该片段的摘录:
public class MyCalendarFragment extends Fragment {
private CalendarView calendarView;
public static MyCalendarFragment newInstance()
{
return new MyCalendarFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
calendarView = new CalendarView(getActivity());
return calendarView;
}
}
最后是我的活动代码的摘录:
public class EditPersonActivity extends Activity {
private Fragment calendarFrag;
private Fragment currentFrag;
private FragmentTransaction fragTrans;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_person);
calendarFrag = MyCalendarFragment.newInstance();
fragTrans = getFragmentManager().beginTransaction();
fragTrans.add(R.id.edit_layout, calendarFrag);
fragTrans.commit();
}
}
我的观点根本没有显示出来。我想这是一个生命周期问题。我也尝试在视图中覆盖onMeasure方法,但这不会改变任何东西。此外,它在视图嵌入活动而不是片段时起作用。非常欢迎任何帮助。 Thx提前。
答案 0 :(得分:0)
最后,我通过直接在描述片段的xml文件中使用自定义视图解决了我的问题。
<com.mycompany.view.CalendarView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
在实现视图的java代码中,我必须以这种方式覆盖其中一个构造函数:
public CalendarView(Context context, AttributeSet attrs) {
super(context, attrs);
//Other code here
}
最后,我不得不重写onMeasure(...)方法:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width, height;
Point size = new Point();
WindowManager w = ((Activity)getContext()).getWindowManager();
w.getDefaultDisplay().getSize(size);
width = size.x;
height = (int) (size.x * 1.5);
setMeasuredDimension(width, height);
}
Et瞧,它有效。谢谢你的帮助。