如何根据时间段动态显示自定义视图?

时间:2016-01-21 11:14:09

标签: java android android-layout android-custom-view

我正在创建一个时间表应用,我想在其中显示创建的事件。为此,我创建了一个布局,在其中我创建了一个滚动视图,其中包含相对布局。我确保这些布局的高度等于一天中的分钟数。这将使1小时= 60分钟= 60 dp,这使得测量事件的高度更容易。

对于活动,我创建了一个自定义视图,可以显示活动的开始和结束时间,以及活动的标题。我想要添加到具有layout_marginTop属性的相对布局的事件,其值等于从一天开始以分钟为单位的事件的开始时间。

例如,如果我想在01:30 AM添加一个1小时的长事件,我会从列顶部添加事件视图90 dp,高度为60 dp。

我知道我必须做什么,但无法在代码中实现它。任何人都可以帮忙。

现在的布局如下:enter image description here

活动视图:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/holo_blue_bright">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Start Time"
        android:id="@+id/textView2"
        android:layout_gravity="right"
        android:layout_marginStart="61dp"
        android:layout_alignTop="@+id/textView"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="End Time"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/textView2"
        android:layout_marginStart="87dp"
        android:layout_marginTop="28dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Title"
        android:id="@+id/textView3"
        android:layout_below="@+id/textView2"
        android:layout_alignStart="@+id/textView2"
        android:layout_marginTop="10dp" />

</RelativeLayout>

在关注你的问题后,我得到了两个这样的事件:

enter image description here

如何检查和获取不同时间的事件? 事件的高度没有变化..

1 个答案:

答案 0 :(得分:0)

我认为你的时间布局看起来像这样。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView>
   <RelativeLayout android:id="@+id/mytimetable">
   <!-- Your time blocks -->

   </RelativeLayout>
</ScrollView>

并且您希望在运行时使用自定义高度和边距将事件的自定义视图添加到此RelativeLayout中。您可以通过更改其LayoutParams

来执行此操作
//Getting your relative layout where you are going to place your events
ViewGroup dayplanView = (ViewGroup) layout.findViewById(R.id.mytimetable);

//Inflating your eventview but not adding it yet. Note that event_layout is your event layout resource.
View eventView = inflater.inflate(R.layout.event_layout, dayplanView, false);
//Getting its current layoutparams in order to change them
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) eventView.getLayoutParams();
//Setting its height (in pixels) (1h 30min)
layoutParams.height = dpToPixels(90);
//Setting topmargin (in pixels) (1.30am)
layoutParams.topMargin = dpToPixels(90);
//Adding layoutparams back to the view
eventView.setLayoutParams(layoutParams);
//Adding your eventview to the relativeview
dayplanView.addView(eventView);

因此我创建了dpToPixels方法将dp转换为像素。它是TypedValue.applyDimension的简化版本。 它看起来像这样。

private int dpToPixels(int dp) {
    return (int) (dp * getResources().getDisplayMetrics().density);
}

我希望这有助于你。 Goodluck与您的应用程序。