2016-01-21 17 views
0

Я создаю приложение таблицы времени, в котором я хочу показать созданные события. Для этого я создал макет, в котором я создал вид прокрутки с относительным расположением внутри него. Я убедился, что высоты этих макетов равны количеству минут в день. Это сделало бы 1 час = 60 минут = 60 дп, что облегчит измерение высот событий.Как показать пользовательский вид динамически на основе временных интервалов?

Для событий я создал пользовательский вид, который может отображать время начала и окончания события, а также название события. События, которые я хочу добавить к относительным макетам с свойством layout_marginTop, значение которого равно начальному времени события в минутах от начала дня.

Например, если я хочу добавить одночасовое событие в 01:30, я бы добавил вид событий 90 dp из верхней части столбца с высотой 60 дп.

Я знаю, что мне нужно сделать, но не удалось реализовать его в коде. Может кто-нибудь помочь, пожалуйста.

Теперь раскладка выглядит следующим образом: 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

Как проверить и получать события в разное время? И высота события не меняется.

ответ

0

Я предполагаю, что ваш макет для времени выглядит примерно так.

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

    </RelativeLayout> 
</ScrollView> 

А вы хотели бы добавить customviews ваших событий в этой 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 для преобразования дп в пикселях. Это упрощенная версия TypedValue.applyDimension. И все выглядит так.

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

Я надеюсь, что это вам помогло. Goodluck с вашим приложением.

+0

Извините, моя вина. Я создал этот метод во фрагменте, в котором я его использовал. Он еще не был там. – EgorDm

+0

Большое вам спасибо .. Это помогает .. Можете ли вы рассказать мне, как я могу показать это для разных временных интервалов, используя время начала и окончания времени? @EgorDm –

+0

@ user5669913 Я бы создал метод в вашем фрагменте, где вы передаете надуватель, ViewGroup, чтобы раздуть его, время начала и окончания. Затем вы повторяете тот же процесс, только вы используете время начала, чтобы вычислить margintop и вычесть время начала с конца, чтобы получить высоту. – EgorDm

Смежные вопросы