我正在尝试创建一个自定义视图,即日历。该组件中的视图是从xml布局膨胀而来的。我学习了几个教程以及在stackoverflow上找到的三四个类似(甚至相同)的问题,但似乎没有任何作用。如果您能指出问题,我将不胜感激。先感谢您,并附上代码。
kcalendar_view.xml //自定义视图的布局
kcalendar_view.xml //自定义视图的布局
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" >
<Button
android:id="@+id/btnKCalendarNavLeft"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="5dp"
android:background="@drawable/kcalendar_nav_button_bg"
android:text="<" />
<TextView
android:id="@+id/txvKCalendarNavTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/btnKCalendarNavRight"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="5dp"
android:background="@drawable/kcalendar_nav_button_bg"
android:text=">" />
</LinearLayout>
<GridView
android:id="@+id/gridViewKCalendar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="7" >
</GridView>
</merge>
KCalendarView.java // 自定义视图的类
package ir.kcoder.KCalendarView;
import ir.kcoder.persiancalendarweather.R;
import java.util.Calendar;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.GridView;
import android.widget.LinearLayout;
import com.samanpr.jalalicalendar.JalaliCalendar;
import com.samanpr.jalalicalendar.JalaliCalendar.YearMonthDate;
public class KCalendarView extends LinearLayout {
private YearMonthDate currentJalaliDate;
private int parentWidth, parentHeight;
private Button leftButton, rightButton;
private GridView gridView;
private KCalendarAdapter calendarAdapter;
private Context context;
private View inflated;
public KCalendarView(Context context) {
super(context);
}
public KCalendarView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
setOrientation(LinearLayout.VERTICAL);
setGravity(Gravity.CENTER);
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflated = inflater.inflate(R.layout.kcalendar_view, this, true);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
init(getContext());
}
private void init(Context context) {
Calendar c = Calendar.getInstance();
YearMonthDate currentGregDate = new YearMonthDate(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));
currentJalaliDate = JalaliCalendar.gregorianToJalali(currentGregDate);
leftButton = (Button)findViewById(R.id.btnKCalendarNavLeft);
rightButton = (Button)findViewById(R.id.btnKCalendarNavRight);
gridView = (GridView)findViewById(R.id.gridViewKCalendar);
if(gridView != null) {
calendarAdapter = new KCalendarAdapter(context, currentJalaliDate.getYear(),
currentJalaliDate.getMonth());
gridView.setAdapter(calendarAdapter);
}
}
public void nextMonth() {
}
public void prevMonth() {
}
// @Override
// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// parentWidth = MeasureSpec.getSize(widthMeasureSpec);
// parentHeight = MeasureSpec.getSize(heightMeasureSpec);
// this.setMeasuredDimension(parentWidth, parentHeight);
// super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// }
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// TODO Auto-generated method stub
}
}
activity_main.xml // 我使用这个标签在我的应用程序中包含自定义视图
<ir.kcoder.KCalendarView.KCalendarView
android:id="@+id/kCalendarView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" >
</ir.kcoder.KCalendarView.KCalendarView>